https://www.acmicpc.net/problem/2908
*주의!
입력받은 두 수를 각각 거꾸로 뒤집었을 때, 둘 중 큰 값을 출력해야 한다.
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() 함수는 리스트 타입에만 제공된다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[python] 백준 3052 : 나머지 (0) | 2022.01.28 |
---|---|
[python] 백준 2920 : 음계 (0) | 2022.01.28 |
[python] 백준 1152 : 단어의 개수 (0) | 2022.01.23 |
[python] 백준 2884 : 알람시계 (0) | 2022.01.23 |
[python] 백준 2577 : 숫자의 개수 (0) | 2022.01.22 |