티스토리 뷰

PS 이야기/PS - BOJ

[BOJ] 2908번 - 상수

whatisyourname 2022. 4. 4. 11:28
반응형

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

 

2908번: 상수

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

www.acmicpc.net

문제

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

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

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

입력

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

출력

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

제한

시간 제한 : 1초 / 메모리 제한 : 128MB


1. 어떻게 풀까?

1-1) 숫자를 뒤집는 두 가지 방법

입력으로 A와 B를 받은 다음, 두 숫자를 각각 뒤집어야 한다.

두 가지 방법이 있는데 첫 번째 방법은 int형으로 처리하는 방법, 두 번째 방법은 string으로 뒤집는 방법이 있다.

 

1.

첫 번째 방법으로 먼저 풀어보자.

뒤집고 싶은 수가 num이라고 하자. 숫자를 뒤집는 다는 것은 낮은 자리수부터 차례로 맨 앞으로 보낸다는 의미이므로, 일의 자리부터 처리해주고, 하나씩 붙여주면 된다.

숫자를 하나씩 붙여주기 위해선 기존의 숫자에 10을 곱한 다음, 새로운 일의 자리를 더해주면 된다. 이를 함수로 나타내면 다음과 같다.

 

1
2
3
4
5
6
7
8
int reversed(int& num){
    int result = 0;
    while (num > 0) {
        result = result * 10 + num % 10;
        num /= 10;
    }
    return result;
}
cs

 

2.

두 번째 방법으로 풀어보자.

C++의 STL의 헤더 <algorithm.h>에는 배열을 뒤집을 수 있는 reverse라는 함수가 존재한다.

C언어를 다루어본 경험이 있는 코더들은 string 형태는 char형의 배열로 다루었던 경험을 토대로 string도 뒤집을 수 있다고 생각할 수 있고, 실제로 C++에서 string형태의 변수에는 배열에 사용되는 함수 대부분을 적용할 수 있다.

reverse의 첫 인자로 배열의 첫 포인터, 두 번째 인자로 배열의 마지막 포인터를 넣어주면 배열 전체를 뒤집을 수 있다.

string을 뒤집은 다음, 이를 다시 정수형으로 변환하여주면 원하는 함수를 만들 수 있다. 이를 나타내면 다음과 같다.

 

 

1
2
3
4
5
int reversed(int& num){
    string num_str = to_string(num);
    reverse(num_str.begin(), num_str.end());
    return stoi(num_str);
}
cs

 

A, B를 각각 뒤집은 다음, 무엇이 더 큰지 max 함수를 이용하여 출력하면 맞았습니다! 를 받을 수 있다.

2)  최종 코드

첫 번째 방법을 기준으로 작성하였다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;
 
int reversed(int& num){
    int result = 0;
    while (num > 0) {
        result = result * 10 + num % 10;
        num /= 10;
    }
    return result;
}
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    int A, B;
    cin >> A >> B;
    cout << max(reversed(A), reversed(B));
 
    return 0;
}
cs
반응형

'PS 이야기 > PS - BOJ' 카테고리의 다른 글

[BOJ] 3052번 - 나머지  (0) 2022.04.04
[BOJ] 2920번 - 음계  (0) 2022.04.04
[BOJ] 2884번 - 알람 시계  (0) 2022.04.04
[BOJ] 2753번 - 윤년  (0) 2022.04.04
[BOJ] 2742번 - 기찍 N  (0) 2022.04.04
댓글
Total
Today
Yesterday
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함