얼마 전 GPT의 실수 비교 방식이 화제가 된 적이 있었다.
질문) "3.9와 3.11 중에 뭐가 더 커?" / 답변) "3.11이 더 큽니다."
수학 시간에 졸지 않은 사람들은 3.9가 3.11보다 크다고 생각하지만,
GPT의 눈으로 보면 Python 3.9와 Python 3.11 중 후자를 더 크게 보는 학습 데이터가 많아 저렇게 생각할 수 있다.
GPT의 세상에서 3.1은 3보다 크고, 마찬가지로 3.9는 3.2보다 크지만, 3.10은 3.2보다 큰 값으로 처리된다.
구체적으로, 소수점을 기준으로 왼쪽을 수로 읽은 값을 x,
오른쪽을 수로 읽은 값을 y라고 할 때
두 수의 비교가 다음과 같이 이루어진다:
x값이 더 작으면 더 작은 수이다.
x값이 같을 경우 y값이 더 작으면 더 작은 수이다.
소수점이 없는 경우는 같은 수의 소수점이 있는 경우보다 항상 작게 취급된다. (다시 말해, GPT에게 3은 3.0보다 작다.)
N개의 수들이 주어졌을 때, 이를 GPT의 기준에 따라 비내림차순으로 정렬해보자.
제약조건
[문제 제약 조건]
[조건 1] N은 1 이상 1,000 이하이다.
[조건 2] 각 수는 실수 혹은 정수로 표현되고, 0 이상 100 이하이며,
소수점이 없거나 소수점 아래 최대 3자리까지 주어진다.
입력형식
첫 번째 줄에 N이 주어진다.
두 번째 줄부터 N개의 줄에 걸쳐, 각 수가 한 줄에 하나씩 주어진다.
01.23, 3.001과 같이 소수점을 기준으로 각 파트의 0이 아닌 수 이전에 leading zero가 나오는 경우는 주어지지 않는다.
추가로, 3.00, 3.000, 또는 00.1과 같이 소수점을 기준으로 한 파트에 두 개 이상의 0만 주어지는 입력은 없다.
출력형식
첫 번째 줄부터 N개의 줄에 걸쳐, 입력으로 주어진 수들을 GPT의 기준으로 비내림차순으로 정렬한 순서대로 한 줄에 하나씩 출력한다.
문제풀이
본 문제는 처음 보았을 때, 정렬문제라는 것을 알 수 있었다.
간단한 정렬문제 였는데, 해당 문제를 해결하기 위해선 정렬 키 값에 대한 이해가 필요했다.
3과 3.0, 3.01, 3.1, 3.9, 3.10 과 같은 숫자가 있을 때,
3보단 3.0이 큰 수가 될 테고
3.10이 3.9보다 큰 값이 된다.
3.10이라는 수치를 3과 10으로 봐야만 한다.
소수점 앞의 수와 뒤의 수를 독립적으로 비교해서 정렬해주면 된다.
따라서 간단히 split해주고 두 값을 넣은 전체 배열을 만들었다.
여기서, 소수점 뒷 자리가 없는 숫자의 경우 -1을 넣어서 항상 작은 수로 나오게 의도했다.
뿐만 아니라, 길이또한 중요하기 때문에,
이를 정렬 기준에 넣어서 해결했다.
(지금와서 보니 별로 필요없는 것 같다..)
정답코드
import sys
n = int(input())
total = []
for _ in range(n):
num = input().split('.')
if len(num) == 1:
num.append(-1)
for i in range(len(num)):
num[i] = int(num[i])
total.append(num)
total.sort(key = lambda x: (x[0], x[-1], len(str(x))))
for t in total:
if t[-1] == -1:
print(t[0])
else:
print(f"{t[0]}.{t[-1]}")
https://www.softeer.ai/practice/11001
Softeer - 현대자동차그룹 SW인재확보플랫폼
www.softeer.ai
'CodingTest > Softeer' 카테고리의 다른 글
[Softeer] 소프티어 나무공격 - Python (0) | 2024.11.30 |
---|