일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Bookmark
- Node.js
- ART_Cinema
- 예술영화추천
- 알고리즘
- 개발
- 장고
- 장고 프로젝트
- 파이썬 웹프로그래밍 장고
- til
- JavaScript
- python
- 북마크만들기
- 장고 프로젝트 순서
- mongodb
- Django Blog
- Blog
- 프로젝트
- MYSQL
- 타사인증
- 북마크앱
- Django
- 자바스크립트
- passport.js
- join()
- Algorithm
- 장고 개발 순서
- Exercism
- 독립영화플랫폼
- MyPick31
- Today
- Total
Juni_Dev_log
(인프런) 파이썬 알고리즘 문제1-5 "정다면체" 본문
Problem
두 개의 정 N면체와 정 M면체의 두 개의 주사위를 던져서 나올 수 있는 눈의 합 중 가장 확 률이 높은 숫자를 출력하는 프로그램을 작성하세요.
정답이 여러 개일 경우 오름차순으로 출력합니다.
▣ 입력설명
첫 번째 줄에는 자연수 N과 M이 주어집니다. N과 M은 4, 6, 8, 12, 20 중의 하나입니다.
▣ 출력설명
첫 번째 줄에 답을 출력합니다.
▣ 입력예제
4 6
▣ 출력예제
5 6 7
💯 Solution ①
: Only My Thinking
- 두 주사위를 굴려서 나온 수들의 합을 담는 배열 sum_list 를 만든다.
- 이중 for 문을 통해서 두 주사위에서 나온 수들의 합을 sum_list에 넣는다.
- 오름차순으로 나와야하기때문에 sort()를 해준다.
- sum_list에서 나온 합들을 딕셔너리 형태로 만들기 위해서 sum_cnt 라는 딕셔너리를 만든다.
ex) sum_cnt : {1:2, 2:3, 3:4} // 1은 2번 나왔고, 2는 3번 나왔고, 3은 4번 나왔다.
- 해당 딕셔너리 형태를 만들기 위해서 sum_list를 for문과 if문을 사용해서 sum_cnt[i]=1 / sum_cnt[i]+=1 등으로 결과를 나눈다.
- 해당 딕셔너리에서 가장 큰 value를 구하고, 해당 value값을 가지고 있는 딕셔너리의 키값을 구해서 출력한다.
(출력할 때는 배열 형태로 나오기 때문에, join()과 map() 을 사용해서 문자열화 시켜서 띄어쓰기를 join하여 출력한다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import sys
sys.stdin=open('input.txt','rt')
n, m=map(int, input().split())
# N,M의 주사위에서 나올 수 있는 숫자의 합을 모은 리스트
sum_list = []
# 정N면체에서 나올 수 있는 수
for i in range(1,n+1):
# 정M면체에서 나올 수 있는 수
for j in range(1,m+1):
sum = i+j
# 합 리스트에 추가
sum_list.append(sum)
# sum_list 오름차순 정렬
sum_list.sort()
# sum_cnt 딕셔너리 생성
sum_cnt=dict()
# 해당 딕셔너리의 갯수를 파악해서 key:value형태로 만들기
for k in sum_list:
if k not in sum_cnt.keys():
sum_cnt[k]=1
else:
sum_cnt[k]+=1
# sum_cnt에서 가장 큰 value 값 찾기
lot_sum_cnt=max(sum_cnt.values())
# 결과 배열 만들기
result=[]
# sum_cnt 딕셔너리에서 가장 큰 value값을 가지는 key값을 result에 추가
for key,value in sum_cnt.items():
if(value==lot_sum_cnt):
result.append(key)
# result 리스트를 문자열로 변환해서 하나씩 출력
print(' '.join(map(str,result)))
|
cs |
💯 Solution ②
: Tutor advice
- 임의의 가장 작은 값을 max의 초기값으로 설정
- 인덱스 번호를 합으로 나온 수를 설정
ex) 1 (정사면체에서 나온 수) + 2 (정육면체에서 나온 수) = 3 (배열의 인덱스 3번에 +1 추가)
- 그렇게 만들어진 cnt 배열을 for문을 돌려서 임의로 설정한 max와 비교해서 max값을 계속해서 갱신하는 식으로 배열의 최대값을 구한다.
- for문을 통해서 cnt 배열의 최대값 max를 만들었다면, max 값이 들어가있는 인덱스 번호를 구해서 print하면 된다.
: if cnt[i] == max: print(i, end=" ")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import sys
sys.stdin=open("input.txt","r")
n, m=map(int, input().split())
cnt=[0]*(n+m+3)
# max는 가장 작은 값으로 설정
max=-2147000000
for i in range(1, n+1):
for j in range(1, m+1):
#눈의 합, 숫자가 나타날 때마다 해당 인덱스에 값이 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=" ")
|
cs |
📚 참고
dojang.io/mod/page/view.php?id=2308
www.delftstack.com/ko/howto/python/how-to-convert-a-list-to-string/
'CodingTest > 인프런 (Algorithm)' 카테고리의 다른 글
(인프런) 파이썬 알고리즘 문제1-7 "소수(에라토스테네스 체)" (0) | 2021.02.17 |
---|---|
(인프런) 파이썬 알고리즘 문제1-6 "자릿수의 합" (0) | 2021.02.17 |
(인프런) 파이썬 알고리즘 문제1-4 "대표값" (0) | 2021.02.13 |
(인프런) 파이썬 알고리즘 "최솟값 구하기" 개념정리 (0) | 2021.02.13 |
(인프런) 파이썬 알고리즘 문제1-3 "K번째 큰 수" (0) | 2021.02.13 |