본문 바로가기

알고리즘 공부/알고리즘 구현 기초

백준) 상수-파이썬

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

(브론즈 2 문제)

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net

입력

1.

734 893

2.

221 231

출력

1.

437

2.

132

내 코드

N,M=input().split()
N_list=list(map(int,N)
M_list=list(map(int,M)
N_list.reversed()
M_list.reversed()
result1=''.join(N_list)
result2=''.join(M_list)
if(int(result1)>int(result2)):
    print(int(result1))
else:
    print(int(result2))

파이썬의 슬라이싱을 이용해서 순서를 바꿀 수 있다는 것은 알았으나 리스트의 순서를 바꾼다고 생각했지 리스트의 값까지 역순으로 해준다는 사실을 알지 못했다.

숫자를 분할해주는 과정을 먼저 진행하였다. 예를 들면 734를 저장할 때 7,3,4 형태로 저장을 시키려고 했다.

그 후 reversed 함수를 이용해서 4,3,7의 형태로 저장 시킨 후 join 함수를 이용해서 분할 했던 과정을 다시 합치고 int로 형변환 후 숫자를 비교해서 출력시키려고 했다.

Attribute error가 발생한 코드이다. 아무래도 문자열 구분과 숫자 구분을 하지 않은 채로 함수를 사용해서 발생한 에러 같다.

다른 풀이

N,M=input().split()
result1=int(N[::-1])
result2=int(M[::-1])
if result1>result2:
    print(result1)
else:
    print(result2)

파이썬의 슬라이싱을 사용하면 금방 해결 될 문제였다. 복잡하게 생각하지 말자.

숫자의 경우 역순으로 바꿔줄 수 없기 때문에 문자열의 형태로 저장한 것을 먼저 슬라이싱으로 역순화 시킨 다음 숫자로 변환하는 과정을 거쳤다.

 

배운 점

아직도 파이썬 슬라이싱에 대한 개념이 부족한 것 같다. 더 공부할 필요가 있다.