[python] 백준 2908 : 상수

728x90

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

 

2908번: 상수

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

www.acmicpc.net


*주의!

입력받은 두 수를 각각 거꾸로 뒤집었을 때, 둘 중 큰 값을 출력해야 한다.

max() 함수를 이용하면 인자로 던져주는 값들 중 가장 큰 값을 반환받을 수 있다.

 

풀이 1 : 나눗셈을 이용

a = list(map(int, input().split()))
newlst = []
for i in a:
  n1 = i // 100
  n2 = (i - (n1*100)) // 10
  n3 = i % 10
  newlst.append(n3*100 + n2*10 + n1)
print(max(newlst))

237 489를 입력받았다고 가정하면 반복문을 통해 각 값에 대해서 다음과 같은 연산을 처리한다.

n1은 백의 자리, n2는 십의 자리, n3는 일의 자리값을 뽑아낸다.

 

n1 = 237 // 10 (237을 10으로 나눈 몫) = 2

n2 = (237 - n1*100) // 10 (237에서 백의 자리값을 날린 37에서 10으로 나눈 몫) = 3

n3 = 237을 10으로 나눈 나머지 = 7

 

그리고 newlst라는 리스트에 각각의 자릿수를 거꾸로 한 값에 대한 정수를 추가한다.

반복문이 끝나면 newlst에는 입력받았던 두 정수를 거꾸로 한 값이 담겨 있다.

max() 함수를 통해 둘 중 큰 값을 출력하도록 한다.

 

풀이 2 : 슬라이드식 접근 이용

a, b = input().split()
a = int(a[::-1])
b = int(b[::-1])
print(max(a,b))

[::-1]은 입력받은 문자열의 순서를 거꾸로 반환한다.

 

 

풀이 3 : reversed와 join함수를 이용

a, b = input().split()
a = ''.join(reversed(a))
b = ''.join(reversed(b))
print(max(a,b))

reversed함수

문자열을 반대로 돌린다.

 

join함수

'구분자'.join(리스트)

인자로 넘겨주는 리스트의 요소들을 구분자로 구분하여 하나의 문자열로 합쳐줌.

각 문자열끼리의 덧셈을 하되 구분자로 구분시켜주는 것과 같음.

위 코드는 구분자가 공백으로 되어있으므로 reversed(a)의 값이 그대로 a에 담긴다.

 

풀이 4 : reverse와 join함수를 이용

a, b = map(str, input().split())
a = list(a)
b = list(b)
a.reverse() 	
b.reverse()   
A = ''.join(a) 
B = ''.join(b) 
print(max(A,B))

reverse는 reversed함수와 다르게 특정한 값을 반환받지 않고 단순히 리스트의 값들을 거꾸로 섞어주기 때문에

A = ''.join(a.reverse()) 와 같은 방식으로 사용하려 하면 에러가 난다.

또한 reverse() 함수는 리스트 타입에만 제공된다.

728x90