[백준] 2908: 상수 - 파이썬[python] (feat. reverse, join, 슬라이싱)

다인·2024년 8월 1일

백준

목록 보기
19/112
post-thumbnail

문제를 딱 보고, 파이썬의 장점을 이용할 수 있는 두 가지 방법이 떠올랐다. reverse와 슬라이싱이었고, 이런 방법으로 푸는 방법을 전에 포스팅한 적이 있지만, reverse에서 자잘한 실수가 있었어서 정리를 또다시 해보았다.

1. reverse

A, B = input().split()

A = list(A)
A.reverse()
A = ''.join(A)

B = list(B)
B.reverse()
B = ''.join(B)

if A>B:
    print(A)
else:
    print(B)
  • A = list(A): reverse는 문자열이 아닌 리스트에 사용할 수 있으므로, list로 변환해야 한다.
  • A = ''.join(A): A와 B의 크기를 비교하기 위해 다시 리스트가 아닌 문자열로 변환해준다. 사실 A = int(''.join(A)) 이렇게 int로 바꾸려고 했는데 실수로 저렇게 적었다. 근데 대소 비교 잘 되네? 파이썬 짱..
    🚨 정말 문자열로 비교해도 맞나 싶어서 더 찾아보았더니, A와 B의 문자열을 하나하나 끊어서 각각 비교해서 A가 더 큰 순간 바로 true를 반환하는 거였다. 이 문제에서는 두 수의 길이가 같았기 때문에 정답이 되었지만 항상 바로 int로 비교하는 게 맞겠다. 예를 들어, '10'>'2'를 비교한다고 하면, 실제로는 10이 더 크지만 첫 값인 '1'과 '2'를 비교했을 때 '2'가 더 크므로 '2'가 더 크다고 판단해서 false를 return하게 되는 것이다.

reverse() vs reversed()

둘 다 똑같이 리스트를 뒤집어 주지만, reverse는 아무것도 반환하지 않는 반면, reversed는 뒤집어진 리스트를 반환해 준다.

join()

join 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수이다.
'구분자'.join(리스트) 형식으로 작성하고, 리스트의 값과 값 사이에 구분자를 넣어서 하나의 문자열로 합쳐준다.

번외

리스트형을 int형으로 바꾸는 방법을 검색하는 와중에, ['1', '2', '3']을 [1, 2, 3]으로 리스트의 각 값의 형을 문자열에서 int형으로 바꾸는 방법도 알게 되어서 번외로 작성해본당

A_new = list(map(int, A))

혹은

A_new = [int(i) for i in A]

이렇게 작성하면 된다.

2. 1의 더 간단한 버전

A, B = map(list, input().split())
A.reverse()
A = ''.join(A)
B.reverse()
B = ''.join(B)

print(max(A, B))
  • A와 B를 list로 변환하는 과정없이 애초에 input 때 list로 받아왔다.
  • if문이 아닌 max 함수를 이용해서 바로 큰 값을 출력하였다.

3. 슬라이싱

A, B = input().split()
A = A[::-1]
B = B[::-1]

print(max(A, B))

결론

밑에서부터 1~3 코드이다. 의외로 2번이 가장 빨랐다.

0개의 댓글