[Python] PGM 181939 더 크게 합치기

Nogglee·2026년 2월 9일

문제 바로가기

결과

def solution(a, b):
    ab=str(a)+str(b)
    ba=str(b)+str(a)
    answer = ab if (ab >= ba) else ba
    
    return int(answer)
  • 시간: 0.01ms
  • 메모리: 9.35MB

문제 분석

  1. 주어진 정수의 문자열 합을 구한다.
  2. 두 문자열 값을 비교하여 조건에 맞는 정수로 반환한다.

접근 방법

  1. 두 정수를 문자열로 변환하여 합한 값을 변수에 저장한다.
  2. 3항 연산자를 활용하여 값을 비교한 후 결과값을 변수에 저장한다.
  3. 결과값을 저장한 변수를 정수로 다시 변환하여 출력한다.

배운 점

사전식 비교

정답을 제출하고 코드를 찬찬히 뜯어보니,
3항 연산자에서 문자열 값이 어떻게 비교가 가능한건지 의문이 들었다.

문자열로 변환하여 합한 값의 변수인 'ab', 'ba'가
우연히 '사전식 비교'의 조건에 부합하여 조건이 성립되었던 것이다.

사전식 비교란, 문자열의 왼쪽부터 한 글자씩 '유니코드' 값으로 비교하게 된다.

유니코드에서 숫자 문자는 아래와 같이 배치되어있다.

'0' = 48
'1' = 49
...
'9' = 57

즉 우리가 사용하는 십진수 크기 순서와 우연히 일치하게 된 것이다.
'1' < '2' < '3' < ... < '9'

문제에서 제공한 예제의 조건은 'ab', 'ba' 모두 길이가 같았다.
그래서 아래와 같은 조건식이 가능했었다.

"123" < "312"   # True

만약 문자열의 길이가 각각 다르다면 아래와 같은 식이 세워질 것이다.

"9" < "10"    # False

9는 한자리 수 이고, 10은 1과 0이 합쳐진 두자리 수 이다.
9와 10의 동일한 자리 수인 첫번째 자리 수만 비교하게 될테고,

유니코드로 변환 시 9는 57, 1은 49가 되기 때문에
두 문자열을 비교한 결과 값이 True가 되려면 "9" > "10"이 되야한다.

내장 함수 max

또 다른 풀이법이 있는지 찾아보다가, 내장 함수인 max를 사용한 풀이를 발견했다.

def solution(a, b):
    return int(max(f"{a}{b}", f"{b}{a}"))

먼저 max의 동작 원리를 알아보면,
max(x, y)는 개념적으로 아래의 식과 같다.
x > y ? x : y (x가 y보다 크다면, x 그렇지 않다면 y 출력)

예제로 주어진 문자열을 입력하게되면 아래와 같이 적용된다.

max("123", "312")
>>> "123" > "312"   # False

위 예시를 보면, max 함수 내부에서도 사전식 비교가 이루어지고있다.
문자열끼리 크기를 비교하고 있기 때문이다.

profile
Product-minded Engineer

0개의 댓글