파이썬(Python)/백준(Baekjoon) 문제 풀이

[백준, python 파이썬] 2908번 : 상수(문자열)

sunning 2022. 3. 23. 13:54
728x90

백준 2908번 문제 풀기

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

 

2908번: 상수

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

www.acmicpc.net


문제 설명

문제

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 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)
728x90