코딩 테스트 스터디/백준

[실버 IV] 1475번. 방 번호

남쪽마을밤송이 2022. 2. 10. 15:24

 문제 

https://www.acmicpc.net/problem/1475

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 사용 언어 

Python3

 제출 답안 

N = list(input()) # 방 번호 9999

num_set = list(range(10))
current_set = []
count = 0
while(len(N)>0): # 4
  num = int(N.pop(0)) # 9
  if num in current_set: # 있으면
    current_set.remove(num) # 숫자 사용
  else: # 없으면
    if num == 6:
      if 9 in current_set:
        current_set.remove(9) # 대신 사용
        continue
    elif num == 9:
      if 6 in current_set:
        current_set.remove(6) # 대신 사용
        continue
    count += 1
    current_set += num_set # 새로운 숫자 세트 추가해서
    current_set.remove(num) # 숫자 사용

print(count)

 공부한 내용 

pop()

지정한 위치에 값을 취득한 후 삭제하는 함수이다.

l = list(range(10))
print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l.pop(0)) # 0
print(l) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(l.pop(3)) # 4
print(l) # [1, 2, 3, 5, 6, 7, 8, 9]

 

뒤에서부터 인덱스를 지정하고 싶은 경우는 마이너스를 사용한다.

l = [1, 2, 3, 5, 6, 7, 8, 9]
print(l.pop(-2)) # 8
print(l) # [1, 2, 3, 5, 6, 7, 9]

인덱스를 생략한 경우에는 마지막 값을 취득하고 삭제한다.

l = [1, 2, 3, 5, 6, 7, 9]
print(l.pop()) # 9
print(l) # [1, 2, 3, 5, 6, 7]

존재하지 않는 인덱스를 지정한 경우에는 에러가 발생한다.

print(l.pop(100))
IndexError: pop index out of range

 

출처: https://ponyozzang.tistory.com/587

remove()

설정한 값과 같은 요소를 검색하고 값을 삭제하는 함수이다.
설정한 값이 리스트에 여러개 있는 경우에는 가장 앞에 있는 값 하나만 삭제한다.

l = ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']
print(l)
# ['Alice', 'Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Alice')
print(l)
# ['Bob', 'Charlie', 'Bob', 'Dave']

l.remove('Bob')
print(l)
# ['Charlie', 'Bob', 'Dave']

설정한 값이 존재하지 않는 경우에는 에러가 발생한다.

l.remove('xxx')
ValueError: list.remove(x): x not in list
# 9

print(l) # [1, 2, 3, 5, 6, 7]

 다른 사람 답안 

n = input()
a = {'0':0, '1':0, '2':0, '3':0, '4':0, '5':0, '6':0, '7':0, '8':0}
for i in range(len(n)):
    if n[i] in ['6', '9']:
        a['6'] += 1
    else:
        a[n[i]] += 1
if a['6'] % 2 == 0:
    a['6'] = a['6'] // 2
else:
    a['6'] = a['6'] // 2 + 1
print(max(a.values()))

출처: https://pacific-ocean.tistory.com/97 

 

딕셔너리를 사용해서 푼 방법인데 전체 숫자 개수중에 가장 많이 사용한 개수가 곧 필요한 숫자 세트라는 생각으로 푸신게 인상깊었다. 나도 저런 아이디어로 간단한 코드를 짤 수 있도록 노력해야겠다..!

 

그리고 9를 사용하지 않고 6으로 합쳐서 계산한 뒤 그 값이 짝수라면 몫을 그대로 사용하고 

그 값이 홀수이면 하나를 더한 값을 넣어준 뒤

전체값 중에서 가장 큰 값을 출력하면 끝! 멋지다