코딩테스트/파이썬 알고리즘 문제풀이 입문
[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - 정다면체
*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.
문제
두 개의 정N면체와 정M면체의 주사위를 던져서 나올 수 있는 눈의 합 중 가장 확률이 높은 숫자를 출력하는 프로그램을 작성하세요. (정답이 여러개일 경우 오름차순으로 출력합니다.)
풀이
• 내 풀이
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
add_nums = [0] * (N+M+1)
for i in range(1, N+1):
for j in range(1, M+1):
value = i+j
add_nums[value] += 1
for k in range(len(add_nums)):
if add_nums[k] == max(add_nums):
print(k, end=' ')
• 답안
N, M = map(int, input().split())
cnt = [0] * (N+M+3)
max = -2147000000
for i in range(1, N+1):
for j in range(1, M+1):
cnt[i+j] += 1
for i in range(N+M+1):
if cnt[i] > max:
max = cnt[i]
for i in range(N+M+1):
if cnt[i] == max:
print(i, end=' ')
- 내 풀이와 답안과 비교했을 때 로직은 비슷한 것 같다.
→ 2중 for문을 돌려서 각각의 합을 구한 뒤, 그 값에 해당하는 인덱스를 찾아 +1씩 해준다.
- 합의 최댓값은 N+M이기 때문에, 나는 0을 값으로 가진 (N+M+1) 크기의 리스트를 선언해줬는데(0부터 시작하기 때문에), 답안에서는 넉넉하게 (N+M+3) 크기의 리스트를 선언해주었다.
- 마지막 for문에서 어차피 0부터 하나씩 값을 확인하기 때문에 당연히 오름차순으로 출력되고, max()를 통해서 리스트 내부 값의 최댓값을 구해 해당 값과 일치하는 인덱스를 한 줄로 출력하게끔 해줌으로써, 답안에서 for문을 한 번 더 사용한 것을 줄여보았다.
반응형
'코딩테스트 > 파이썬 알고리즘 문제풀이 입문' 카테고리의 다른 글
[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - 소수의 개수 (에라토스테네스 체) (0) | 2023.04.24 |
---|---|
[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - 자릿수의 합 (0) | 2023.04.11 |
[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - 대표값 (0) | 2023.04.07 |
[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - K번째 큰 수 (0) | 2023.04.06 |
[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - K번째 수 (0) | 2023.04.06 |
댓글