백준 코딩테스트/구현

2908번: 상수 (8 / 21) - 브론즈 2

monkeykim 2024. 10. 8. 23:53

문제

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

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

출력

첫째 줄에 상수의 대답을 출력한다.

예제 입력 1

734 893

예제 출력 1

437

예제 입력 2

221 231

예제 출력 2

132

예제 입력 3

839 237

예제 출력 3

938

코드

num_arr = list(input().split())

sorted_arr = []

for num in num_arr:
	num_str = ''
	for j in range(2, -1, -1):  # j: 2, 1, 0임
		num_str += num[j]
	sorted_arr.append(int(num_str))

sorted_arr.sort(reverse=True)

print(sorted_arr[0])

코드 풀이

  1. 2개의 input을 공백을 기준으로 입력을 받고, 그것을 list로 감싼다.
    • 반복을 돌리기 위해 list로 감쌌음
  2. sorted_arr을 list로 초기화 해준다.
    • 나중에 거꾸로 변경된 num을 담기 위해 사용
  3. 2중 반복을 사용한다.
    • num_str = ‘’ 을 초기화한다.
      • 반복을 하며 string끼리 더하기 위함
    • 두번째 반복에서는 거꾸로 반복을 돌기 위해 start, end, step을 지정해준다.
      • 문제에 3자리 수가 나온다고 했으므로, 하드코딩으로 진행
      • strat = 2, end = -1, step = -1 (end가 -1인 이유는 0까지 index를 뽑기 위함)
    • num_str에 거꾸로 반복된 숫자를 더해주고 두번째 반복 종료 시 int로 변환후 sorted_arr에 넣음
  4. sorted_arr을 내림차순으로 정렬을함
    • 가장 큰 수를 출력하기 위해 요소를 내림차순으로 정렬함

핵심 포인트

  1. input을 list에 담아서 처리
    • 2개의 input값을 반복하면서 처리하기 위해 input을 list에 담았음
  2. 2중 for문의 2번째 반복에서 거꾸로 순회하며 수를 뽑아냄
  3. sorted_arr에 담긴 요소를 정렬
    • 가장 큰 수를 뽑아내야 하므로 정렬을 해야함
      • 오름차순이든 내림차순이든 상관은 없음