분해합 ( https://www.acmicpc.net/problem/2231 )
처음 푼 코드는 시간초과가 나왔다...
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
n = input()
cnt = 1
while True :
m = cnt
num_list = list(str(cnt))
for i in num_list:
m += int(i)
if m == n :
break
else :
cnt += 1
print(cnt)
|
cs |
지금 다시 보니까 생성자가 없는 경우 0을 출력해주는 코드를 빼먹었다. 엥? 싶어서 돌려봤는데 틀렸다고 나옴 왜지?
아까 풀었을땐 그래도 답이 나오긴 했는데 ? ? 잉 ? ? 그래서 다시 풀다가 계속 실패해서 구글링 해버림 . . .
참고한 사이트 : https://goplanit.site/50.%20Algorithm(2231_py)/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 분해합의 생성자를 구해야 한다.
# n: 입력된 분해합 / m: 생성한 분해합 / i: 생성자가 되기 위해 1씩 증가하는 친구
def decompose():
# 입력된 분해합
n = int(input()) # 198 + 1 + 9 + 8
# 생성자에 값을 더해서 분해합을 도출하기 때문에
# 생성자는 입력값을 넘지 않는다!
# 그래서 입력값만큼 회전
for i in range (n + 1) :
# 분해합 생성 공식 ( 무지성포문 대신 내장함수를 이용... )
m = i + sum(map(int, str(i)))
# 여기서 i에 바로 그냥 분해합공식을 적용해 분해합으로 만드려고 하는데 오류발생
# 마지막인걸 구분하는 if문을 위로 올려도 오류가 발생 (왜지 ??)
# 생성한 분해합과 입력된 분해합이 같은 값이라면
if m == n :
print(i)
break
#마지막에 도달해서 값이 없을 경우
if i == n:
print(0)
|
cs |
덕분에 좋은 함수를 알았다. sum()과 map()이다.
sum()은 리스트 내 숫자를 전부 더해줌. 쿼리 쓸 때 사용하는 함수랑 비슷한 역할이라고 생각하면 될 것 같고
map()은 map(int, list) 이런 식으로 활용이 가능하다. 두 번째 칸에는 숫자로 쓰인 문자열을 넣어도 되고 리스트를 넣어도 되는데 기존의 리스트를 변환하는것이 아니라 새 리스트를 리턴하기 때문에 변수에 할당해주어야 함.
python map에 대한 활용을 알아볼 수 있는 링크 : https://dojang.io/mod/page/view.php?id=2286
'개발공부 > 문제풀기' 카테고리의 다른 글
| 백준 1920 - 수 찾기 (0) | 2022.03.21 |
|---|---|
| 백준 2525 - 오븐시계 (0) | 2022.03.20 |
| 백준 1259 - 팰린드롬수 (0) | 2022.03.17 |
| 백준커리큘럼 (0) | 2022.01.18 |
| 백준 2916번 - 저작권 (0) | 2021.11.18 |
댓글