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은 중복 체크에 강하다!
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/1547] 공 | 두 수의 전환 (0) | 2024.07.05 |
---|---|
[백준/1063] 킹 | 구현 실수 방지를 위한 경우의 수 체크하기 (0) | 2024.03.31 |
[백준/1068] 트리 (0) | 2024.03.06 |
[백준/2606] 바이러스 | 양방향 그래프 정의 | DFS (0) | 2024.03.05 |
[백준/22232] 가희와 파일 탐색기 (0) | 2024.02.28 |