문제
3 6 9 게임을 프로그램으로 제작중이다. 게임 규칙은 다음과 같다.
1. 숫자 1부터 순서대로 차례대로 말하되, “3” “6” “9” 가 들어가 있는 수는 말하지 않는다.
1 2 3 4 5 6 7 8 9…
2. "3" "6" "9"가 들어가 있는 수를 말하지 않는대신, 박수를 친다. 이 때, 박수는 해당 숫자가 들어간 개수만큼 쳐야 한다.
예를 들어 숫자 35의 경우 박수 한 번, 숫자 36의 경우 박수를 두번 쳐야 한다.
입력으로 정수 N 이 주어졌을 때, 1~N 까지의 숫자를
게임 규칙에 맞게 출력하는 프로그램을 작성하라.
박수를 치는 부분은 숫자 대신, 박수 횟수에 맞게 “-“ 를 출력한다.
여기서 주의해야 할 것은 박수 한 번 칠 때는 - 이며, 박수를 두 번 칠 때는 - - 가 아닌 -- 이다.
[제약사항]
N은 10이상 1,000이하의 정수이다. (10 ≤ N ≤ 1,000)
[입력]
입력으로 정수 N 이 주어진다.
[출력]
1 ~ N까지의 숫자를 게임 규칙에 맞게 출력한다.
문제풀이
- 박수 치는 조건
3,6,9
를 리스트에 저장한다 - 1부터 입력받은 자연수 n까지 1씩 증가시키면서 수를 탐색한다
- 해당 수에 조건
3,6,9
가 몇번 포함되는지를 세는cnt
변수를 둔다 - 해당 수의 각 자릿수마다 조건
3,6,9
에 포함되는 숫자가 있는지 확인하고, 있다면cnt
를 증가시켜준다 - cnt 변수가 증가되지 않고 0이면, 박수치는 숫자가 아니란 뜻이므로 해당 숫자를 그대로 출력한다
- cnt 변수가 0에서 증가되었다면,
cnt
수만큼-
를 출력한다 - 출력 후에는 cnt 변수를 다시 0으로 초기화 시킨다
- 해당 수에 조건
작성 코드 (Python)
num = int(input())
ans = ''
condition = ['3','6','9']
for n in range(1, num+1):
cnt = 0
digit = str(n)
for d in digit:
if d in condition: cnt += 1
if cnt == 0: ans += digit
else:
for _ in range(0, cnt):
ans += '-'
ans += ' '
print(ans)
느낀 점
문제를 잘 읽는 것이 곧 잘 푸는 비결이다
문제 풀기를 위한 가장 중요한 첫단계는 문제의 요구사항을 정확하게 이해하는 것이다.
이걸 이 문제에서 크게 느낀 이유는... 문제의 요구사항과 다른 코드를 작성했기 때문이다....ㅎ
왜 계속 fail일까 했더니... 문제를 오독한게 원인이었다.
"31 32 33" 이라면 "-1 -2 --" 으로 출력해야되는 줄 알았으나, "- - --" 으로 출력해야 맞는 것이었다.
문제 설명 2번에서 무려 "예를 들어 숫자 35의 경우 박수 한 번, 숫자 36의 경우 박수를 두번 쳐야 한다." 라는 구체적인 예시를 들어주면서 되짚어준 사항이었다....
정말 바보같은 실수이지만... 덕분에 이를 발판삼아 꼼꼼히 문제를 뜯어보는 습관을 기를 수 있을 것 같다.
'Problem Solving' 카테고리의 다른 글
[JS 알고리즘] Toy 4 - bubbleSort (0) | 2022.05.16 |
---|---|
[JS 알고리즘] Toy 3 - isSubsetOf (0) | 2022.05.16 |
[SWEA] D2 - 1954. 달팽이 숫자 in 파이썬 (0) | 2022.05.15 |
[JS 알고리즘] Toy 23 - spiralTraversal (0) | 2022.05.13 |
[JS 알고리즘] Toy 2 - fibonacci ( O(n) ) (0) | 2022.05.12 |