새소식

Algorithm/파이썬 알고리즘 문제풀이 강의

[코드 구현력 기르기] 5. 정다면체

  • -

1. 문제

2. 내 풀이

 

3. 답

n,m=map(int,input().split())
cnt= [0 for i in range(n+m+3)]
#cnt=[0]*(n+m+3) #cnt가 0으로 초기회되면서, 크기는 n+m+3인 리스트

max=-214700000
for i in range(1,n+1):
    for j in range(1,m+1): #i와 j는 나오는 눈
        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): #max인 것들의 인덱스를 출력하려고 하는 것.
    if cnt[i]==max: #i가, 가장 높은 빈도수의 숫자인 것.
        print(i,end= ' ')

4. 반성할 점

  • 아직, 리스트의 인덱스와 값을 자유자재로 가지고 노는 것에 미숙한 듯 하다.
  • cnt라는 임시요소에 무엇을 증가시킬 때, 머리가 굳어버린다.
  • 이 문제에서 관건은, 가장 높은 빈도수로 나온 숫자가, cnt라는 리스트에서 인덱스로서 추가된다는 것이었는데

그걸 잘 이용하지 못했다. cnt[i+j]+=1 처럼, 인덱스에 두 값을 더한 형태가 오는 케이스를 다룬 적이 없었다.

마지막 for문에서, 출력하는 반복문까지 빼먹지 말고 익히자

  • max값과 관련해서는, max라는 변수를 위와 같이 터무니없이 작은 값으로 정하는 센스가 필요했다.

5. 새로 알게된 점

리스트를 특정 값(ex->0)으로 초기화하는 방법

방법 1) list_name=[0 for i in range(100)] 크기가 100인 리스트를 전부 0의 값으로 초기화했다

방법 2) list_name=[0] * 100

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.