반응형
https://www.acmicpc.net/problem/3578
이 문제는 입력숫자 h개 만큼의 구멍을 뚫기 위해 기입해야하는 숫자 중 가장 작은 숫자를 출력하는 문제입니다. 예를 들어서 뚫어야 하는 구멍의 개수가 0개라면 1, 2, 3, 5, 7의 5개 숫자 중에서 가장 작은 1을 출력하고, 1개라면 0, 4, 6, 9 중에서 0을 출력하고, 2개라면 8을 출력하는 식으로 말이죠.
뚫리는 구멍의 개수 | |
0 | 1 |
1 | 0 |
2 | 0 |
3 | 0 |
4 | 1 |
5 | 0 |
6 | 1 |
7 | 0 |
8 | 2 |
9 | 1 |
표로 정리하면 각 숫자당 뚫리는 구멍의 개수는 이렇게 볼 수 있습니다.
사실 간단하게 떠올릴 수 있는 건 조건문을 설정해서 몇가지 예외를 두고 나머지를 일반화하는 방식이 있겠죠. 위에서 언급했던 0, 1, 2개의 경우를 제외하면 홀수는 488...로, 짝수는 888...로 일반화가 가능합니다. 따라서 이런식으로 코드를 작성할 수 있겠죠.
h = int(input())
if h == 0:
print(1)
elif h == 1:
print(0)
elif h == 2:
print(8)
elif h%2==1:
print('4'+'8'*(h//2))
else:
print('8'*(h//2))
파이썬은 산술연산자를 이용해서 문자열의 길이를 늘리거나 줄일 수 있습니다. 파이썬이 기본적으로 해놓은 오버로딩이라고도 볼 수 있지 않을까 싶네요. 간단한 구현 문제였습니다. 알고리즘에 그리디가 있어서 풀이를 작성한 거였는데, 아무리 따져봐도 완전히 일반화하기 어려울 뿐더러 예외처리를 해놓고 보니까 단순히 문자열로 나타내는 것과 크게 다를바가 없어서 그리디 풀이는 따로 기재하지 않겠습니다.
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ][Python]2864 풀이 (0) | 2022.12.29 |
---|---|
[BOJ][Python]5585 풀이 (0) | 2022.12.28 |
[BOJ][Python]11034 풀이 (0) | 2022.11.15 |
[BOJ][Kotlin]22193 풀이 (0) | 2022.11.14 |