문제
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
★ 잠깐! 풀기 전에 생각하기
계속 반복해야 하니까 재귀함수를 써야 하나...? 그런데 익숙하지가 않다.. 그림도 안그려진다..6, 9일 경우가 문제고 나머지는 구현하기 쉬우니 6, 9일경우만 따로 나누어서 생각하면 될 것 같다. 일단 해봤다.
import sys
input = sys.stdin.readline
n = list(map(int,input().strip()))
# 옆집에서 숫자 사다가 보관하는 박스를 만들었다.
# 세트를 산 횟수를 나타내는 cnt를 만들었다.
box = []
cnt = 0
# 천천히 한단계씩 생각해보자.
for num in n:
# 6, 9인지 아닌지가 중요해서 나누었다.
# 이후 그 숫자가 있는지, 그리고 뒤집혀 진게 있는지로 나누어야 한다.
if num == 6 or num == 9:
if 6 in box or 9 in box:
if num in box:
box.remove(num)
else: # 리스트 빼기 부분인데.. 도저히 방법이 없어서 원소를 뺏다.
change = [6, 9]
change.remove(num)
box.remove(change[0])
# 박스에 6, 9가 없으면 세트 하나 넣어주고 하나 사용하자.
else:
box += [1,2,3,4,5,6,7,8,9,0]
cnt += 1
box.remove(num)
# 6,9가 아니면 쉽다.
else:
if num in box:
box.remove(num)
else:
box += [1,2,3,4,5,6,7,8,9,0]
cnt += 1
box.remove(num)
print(cnt)
생각보다 생각하는데 시간이 오래 걸렸다. 이런 문제는 처음이라서 그런가... 나중에 비슷한 문제가 나오면 또 이런 식으로 풀 것 같다. 생각을 유연하게 하는 게 중요하긴 한데... 현재는 비슷해 보이는 유형을 비슷하게 푸는 연습을 하고 있다. 수학같이....
구현 다른 문제도 풀었지만.. 답이 안나와서 해결하고 업로드해야겠다.
★ 해결 못한 문제.. '1996번. 프린터 큐'
'백준_알고리즘' 카테고리의 다른 글
[백준] 2504. 구현_괄호의값 - Python (1) | 2021.02.06 |
---|---|
[백준] 1260. 너비우선탐색_DFS와 BFS - Python (0) | 2021.02.04 |
[백준] 14891. 구현_톱니바퀴 - Python (0) | 2021.02.02 |
[백준] 7568. 구현_덩치 - Python (0) | 2021.01.28 |
[백준] 1316. 구현_그룹단어체커 - Python (2) | 2021.01.28 |