CodingTest/Softeer

[Softeer] GPT식 숫자 비교 - Python

사족보행 개발자 2024. 12. 1. 00:26
728x90

GPT식 숫자비교

 

 

얼마 전 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

 

728x90