언어/[python]

[python] 백준 2562

dayeonsheep 2023. 2. 9. 16:40
  • 오답 이유 찾기

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

 

2562번: 최댓값

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

www.acmicpc.net

#시도1

import sys
data=[sys.stdin.readline() for i in range(9)]
print(max(data))
print(data.index(max(data))+1)

이렇게 했더니 출력될 때

85

 

8

이런식으로 출력되길래

 

#시도2

import sys
data=[sys.stdin.readline() for i in range(9)]
m = max(data)
print(m,end='')
print(data.index(m)+1)

end=''를 이용해서 

85

8

출력 형식을 맞춰주었다

근데 또 틀려서 반례를 찾아 봤더니

1
2
3
4
5
6
7
8
10

을 입력하면 출력이 10\n10 이 아니라 8\n8로 나온다

근데 왜 그렇게 나오나... int 형변환이 문젠가하고 질문 했더니

 

답변

>> data배열에 값을 숫자가 아닌 str 타입으로 저장하고 있기 때문입니다.

str타입의 크기비교는 사전 순서를 따릅니다. 즉 '2'보다 '10'이 더 작습니다.

int형으로 저장하세요.

 

이래서였다

명쾌한 답변...

https://western-sky.tistory.com/114

 

프로그래머스 - 가장 큰 수 (정렬)

🔸 문제 해결 방향 문자열 처리를 통해 풀어야한다. 문자열 비교가 어떻기 이루어지는지 숙지할 것 문자열 곱셈을 수행한 뒤 비교한 이유는? 문자열 비교 → 숫자 변환 → 문자열 변환 후 반환

western-sky.tistory.com

문자열 크기 비교하는 것 정리는 이 분이 아주 잘... 정리해주셨기에

 

#시도3

import sys

data=[]
for i in range(9):
    data.append(int(sys.stdin.readline()))
    
print(max(data))
print(data.index(max(data))+1)

이게 형식은 훨씬 이해 잘 되긴 함

이렇게 해서 맞았습니다를 획득했다

 

오늘은... 피곤해서 이만할란다