Lumpy Space Princess - Adventure Time
코딩테스트/파이썬 알고리즘 문제풀이 입문

[파이썬 알고리즘 문제풀이 입문] 코드 구현력 기르기 - 정다면체

yaebb_82 2023. 4. 7.

*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.

 

 

문제

두 개의 정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문을 한 번 더 사용한 것을 줄여보았다.

 

 

 

반응형

댓글