반응형
[문제] K번째 큰 수
두 개의 정 N면체와 정 M면체의 두 개의 주사위를 던져서 나올 수 있는 눈의 합 중 가장 확
률이 높은 숫자를 출력하는 프로그램을 작성하세요.
정답이 여러 개일 경우 오름차순으로 출력합니다.
입력 설명
첫 번째 줄에는 자연수 N과 M이 주어집니다. N과 M은 4, 6, 8, 12, 20 중의 하나입니다.
출력 설명
첫 번째 줄에 답을 출력합니다.
입력예제 1
4 6
출력예제 1
5 6 7
문제 접근
- N과 M을 입력받고, N+M의 합은 주사위가 나올 수 있는 최대합이므로 N+M의 합의 갯수만큼 0의 값을 가지는 배열을 만들어준다.
- N과 M을 이중 for문을 돌면서 두 주사위의 합의 인덱스에 +=1 을 해준다.
- dice 배열을 for문을 돌려서 if max값과 같으면 출력한다.
풀이
나의 코드
N,M = map(int, input().split())
# (N + M)을 더하면 두 주사위의 최대합이다.
# 주사위가 나올 수 있는만큼 0의 값을 가지는 1차원 배열을 만든다.
dice = [0 for _ in range(N+M)]
for i in range(1, N+1):
for j in range(1, M+1):
# 주사위의 합에 해당하는 인덱스에 1을 더해준다.
dice[i+j-1] += 1
for idx in range(len(dice)):
# 각각의 배열을 돌면서 최댓값이면 즉, 확률이 높은 수들을 출력한다.
if dice[idx] == max(dice):
print(idx+1, end=' ')
정답 코드
- 위의 나의 코드와 다른점은 2행에서 for문을 통해서 배열을 만들지 않고 그냥 연산을 통해서 만들었다.
- 9행 : python의 내장 함수인 max를 사용하지 않고 구현을 했다.
n,m = map(int, input().split())
cnt = [0] * (n+m+3) # 조금 더 넉너가게 고냥 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=' ')
반응형
'코딩테스트 > Algorithm' 카테고리의 다른 글
[Algorithm][Python] 곶감(모래시계) (1) | 2021.05.20 |
---|---|
[Algorithm][Python] 자릿수의 합 (0) | 2021.05.19 |
[Algorithm][Python] 대표값 (0) | 2021.05.13 |
[Algorithm][Python] K번째 큰 수 (0) | 2021.05.13 |
[Algorithm][Python] K번째 작은수 (0) | 2021.05.13 |
[Algorithm][Python] K번째 약수 (0) | 2021.05.13 |