김두두의 블로그

[python] 백준 2562번- 배열과 최댓값 본문

it

[python] 백준 2562번- 배열과 최댓값

두두100 2022. 3. 3. 02:03

220302

 

https://www.acmicpc.net/problem/2562

 

2562번: 최댓값

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어

www.acmicpc.net

한지 오래돼서 예전에 내가 제출했던거 살짝 보고 다시 풀었음.. 그리고 내가 원하는대로 안나와서 좀 코드가 더럽다!

 

s_list=[int(input()) for i in range(9)]

k=0
m=max(s_list)
for i in range(0,len(s_list)-1):
    if s_list[k]!=m:
        k=k+1
    else:
        break
print(m)
print(k+1)

처음에 s_list로 input 받기

->계속 오류났는데 하도 오류나서 print(s_list)로 s_list 검사해봤는데 알고보니 다 죄다 ['1', '2', '3'...] 뭐 이런식으로 되어있었다. 그러니까 문자열로 계속 입력받아놓고 max 찾은 거... 이거 보고 넘 황당해서 재빨리 int(input())으로 바꿔줬습니다..

 

그리고 계속 뭘 해도 range(3) 이었다 치고 3 2 1 입력 받았으면 print(k)가 0이 나오길래 진짜 미쳐버리는줄

난 위에 글로벌 변수 k=0 땜에 적용안된 줄 알았는데 다른 수 넣으니까 갑자기 1 나오길래 걍 +1만 하면 된다는 사실을 얻었다.. 이거 나중에 +1안하고 처음부터 변수로 적용하려면 어떻게 해야하는 지 생각해봐야겠다. 지금 생각해보니 가장 첫번째에 maximum이 되는 수가 온다면 내 for문에선 바로 break가 되니까 k=0으로 되었던 듯...이렇게 항상 문제풀 땐 보이지 않는게 있다니까ㅋㅋㅋ 그래서 아마 k=1로 바꾸면 스무스하게 나올거같다

 

사실 계속 위 문제(k=0) 때문에 while 대신 for 쓴건데 알고보니 while 문제가 아니였네 

s_list=[int(input()) for i in range(9)]

k=0
m=max(s_list)
while s_list[k]!=m:
    k=k+1
    
print(m)
print(k+1)

다시해보니까 while도 잘된다

정말 k+1의 효과가 큰듯 ㅋㅋㅋ(while 문에서는 배열 때문에 일부러 k=0썼다!)