백준 2908번 문제 풀기
https://www.acmicpc.net/problem/2908
문제 설명
문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
출력
첫째 줄에 상수의 대답을 출력한다.
예제 입력 1
|
예제 출력 1
|
734 893 |
437
|
예제 입력 2
|
예제 출력 2
|
221 231
|
132
|
예제 입력 3
|
예제 출력 3
|
839 237
|
938
|
알고리즘 및 설명
내가 구현한 알고리즘은 아래와 같다.
A, B = map(str, input().split())
A, B = A[::-1], B[::-1]
A, B = int(A), int(B)
if A > B:
print(A)
else:
print(B)
세 자리수 숫자들을 거꾸로 읽어들여야하기 때문에 처음엔 두 수를 문자열로 읽어들였다. 그 후에 각각 수를 뒤집기 위해 [::-1]를 사용하였다. 그리고 다시 각각 A, B의 대소 비교를 위해 정수형 변수로 바꾸어주었다.
이걸 더 간단히 구현할 수 있는데, 그건 map의 성질을 이용하는 것이다. 나는 백준 문제를 풀면서 대부분 map을 사용하여 input 값을 불러왔는데 map 함수의 기본적인 형태를 제대로 배운 적은 없다.
map 함수
- map(f, iterable) : 함수 (f)와 반복 가능한(iterable) 자료형을 입력으로 받음
- map 함수는 입력받은 자료형의 각 요소를 함수 f가 수행한 결과로 묶어서 돌려주는 함수
예를 들어, interable 자료형인 리스트 A가 있다고 하자. 이 A의 제곱을 해서 반환하려고 할때, map 함수를 사용하지 않는다면 아래와 같이 구현할 수 있을 것이다.
A = [1, 2, 3, 4]
Result = []
for a in A:
Result.append(a**2)
print(Result)
이것을 map 함수와 lambda를 사용하면 A에 있는 원소들에 대해 모두 제곱한 결과를 묶어서 반환할 수 있으므로 아래와 간단히 세 줄로 표현할 수 있다. map의 function을 "lambda 매개변수 : 표현식"의 형식으로 작성하였는데, 이는 A의 원소들 x를 x**2로 반환하겠다는 의미이다.
A = [1, 2, 3, 4]
Result = list(map(lambda x:x**2, A))
print(Result)
따라서 map 함수를 적절히 활용하면 효율적으로 코드를 작성할 수 있다. 본 문제에도 map 함수의 성질을 이용하여 구현하면 훨씬 간결하게 구현 가능하다.
A, B = map(lambda x : int(x[::-1]), input().split())
if A > B:
print(A)
else:
print(B)
'파이썬(Python) > 백준(Baekjoon) 문제 풀이' 카테고리의 다른 글
[백준, python 파이썬] 2941번 : 크로아티아 알파벳(문자열) (0) | 2022.03.27 |
---|---|
[백준, python 파이썬] 5622번 : 다이얼(문자열) (0) | 2022.03.23 |
[백준, python 파이썬] 1152번 : 단어의 개수(문자열) (0) | 2022.03.23 |
[백준, python] 1157번 : 단어 공부(문자열) (0) | 2022.03.21 |
[백준, python] 2675번 : 문자열 반복(문자열) (0) | 2022.03.21 |