PS/BOJ&Programmers
[백준/5671] 호텔 방 번호 | 중복값 개수 세기(딕셔너리와 SET)
sebinChu
2024. 3. 17. 02:30
5671 호텔 방 번호
알고리즘
범위에 해당하는 숫자들이 자릿수마다의 중복되는지 체크하면 된다. 같은 값이 있는지 확인하는 방법으로는 딕셔너리를 떠올렸고 아래와 같이 중복 체크를 해주었다.
for item in hotel:
d={'0':0, '1':0, '2':0, '3':0, '4':0, '5':0, '6':0, '7':0, '8':0, '9':0}
flag=True
for s in str(item):
if s in d.keys():
d[s] += 1
for v in d.values():
if v >= 2 :
flag=False
if flag:
ans.append(item)
문제를 다 풀고 다른 사람의 풀이를 보는데 중복 체크를 Set으로 간단하게 하는 경우를 봤다.
set 자료형을 배울 때 중복체크에 유용하다는 내용을 봤었는데, 관련 문제를 통 안풀다보니 완전히 까먹고 있었다..!
for i in range(N, M+1):
num = str(i)
numList = list(num)
numSet = set(numList)
if len(numList) == len(numSet):
count += 1
내 코드와 비교해서 굳이 딕셔너리나 정답 리스트를 선언하지 않고도 풀 수 있다. 훨씬 간결하고 효율도 좋다.
전체 코드
while True:
try:
n,m=input().split()
hotel=list(range(int(n),int(m)+1))
ans=[]
for item in hotel:
d={'0':0, '1':0, '2':0, '3':0, '4':0, '5':0, '6':0, '7':0, '8':0, '9':0}
flag=True
for s in str(item):
if s in d.keys():
d[s] += 1
for v in d.values():
if v >= 2 :
flag=False
if flag:
ans.append(item)
print(len(ans))
except EOFError:
break
알게된 점
- SET은 중복 체크에 강하다!