일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 솔루션조사
- 머신러닝
- Redis
- k8s
- vuejs
- 도커
- POD
- 리트코드
- 생성형
- LLaMa
- LeetCode
- 컨설턴트
- 오픈시프트
- OpenShift
- GPT
- jpa
- Python
- Docker
- 생성형 AI
- 컨설팅
- BFS
- Machine Learning
- vue.js
- 로깅
- 쿠버네티스
- kubernetes
- SpringBoot
- fast api
- fastapi
- 메세지큐
- Today
- Total
수 많은 우문은 현답을 만든다
(Easy) 애너그램 유효성 검사 본문
리팩토링이 좋아서, 코드 퀄리티에 관심을 가지고 보자
애너그램은 단어를 구성하는 똑같은 수의 알파벳들로 다른 단어를 만드는 유희를 말한다.
Given two strings s and t, return true if t is an anagram of s, and false otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
Example 1:
Input: s = "anagram", t = "nagaram"
Output: true
Example 2:
Input: s = "rat", t = "car"
Output: false
풀이
#의식의 흐름대로 짜면 이렇게 된다
s_dic = dict()
t_dic = dict()
for a in s:
if a in s_dic:
s_dic[a] += 1
else:
s_dic[a] = 1
for a in t:
if a in t_dic:
t_dic[a] += 1
else:
t_dic[a] = 1
if len(s) >= len(t):
for x in s_dic:
if x not in t_dic:
return False
if s_dic[x] != t_dic[x]:
return False
else:
for x in t_dic:
if x not in s_dic:
return False
if s_dic[x] != t_dic[x]:
return False
return True
리팩토링
# 함수 시작시 길이 밸리데이션을 해주면 for문을 하나 줄일 수 있다.
if len(s) != len(t):
return False
# get 을 활용하자. s_dic에서 char를 get 했으나 결과가 없으면 0, 있으면 +1을 하는 코드다.
for char in s:
s_dic[char] = s_dic.get(char, 0) + 1
# 조건문을 간략화
if char not in t_dict or s_dict[char] != t_dict[char]:
# 완성본
'코딩테스트 > Dictionaries' 카테고리의 다른 글
(Hard) Sherlock and Anagrams (0) | 2023.12.15 |
---|---|
(Easy) Number of 1 Bits (0) | 2023.06.18 |
(Easy) Single Number (0) | 2023.06.18 |