
이번 문제는 먼저 string으로 입력을 받은 뒤 Split을 사용해 공백을 기준으로 두 개의 숫자를 나누었다.
하지만 string 타입은 불변(immutable) 객체이기 때문에 문자열 내부의 문자를 직접 변경할 수 없다. 따라서 문자열을 수정하려면 새로운 문자열을 만들어야 한다.
이를 해결하기 위해 문자열을 ToCharArray() 메서드를 이용해 char[] 배열로 변환하였다. char 배열은 각 문자에 인덱스로 접근하여 값을 변경할 수 있기 때문에 원하는 위치의 문자를 교환할 수 있다.
문제에서 주어지는 숫자는 항상 3자리 수이므로, 첫 번째 문자와 마지막 문자만 서로 교환하면 숫자를 뒤집을 수 있다.
이렇게 두 숫자를 각각 뒤집은 뒤 int로 변환하고, Math.Max 메서드를 사용해 두 값 중 더 큰 값을 출력하도록 구현하였다.
이번 문제는 Reverse() 메서드를 활용하면 더욱 간단하게 해결할 수 있다.
입력받은 문자열을 Reverse()로 뒤집은 뒤 int형으로 변환하고, Math.Max를 사용해 두 수를 비교하면 더 큰 값을 쉽게 구할 수 있다.
//백준 2908번 상수
string[] inputData = Console.ReadLine().Split(' ');
char[] A = inputData[0].ToCharArray();
char[] B = inputData[1].ToCharArray();
//A 뒤집기
char temp = A[0];
A[0] = A[2];
A[2] = temp;
//B 뒤집기
temp = B[0];
B[0] = B[2];
B[2] = temp;
//변경된 모든 A B 값 중 더 큰수를 출력
int numA = int.Parse(new string(A));
int numB = int.Parse(new string(B));
Console.WriteLine(Math.Max(numA, numB));
//Reverse를 사용해 풀기
/*
string[] inputData = Console.ReadLine().Split();
int A = int.Parse(new string(inputData[0].Reverse().ToArray()));
int B = int.Parse(new string(inputData[1].Reverse().ToArray()));
Console.WriteLine(Math.Max(A, B));
*/
//문자열 인덱스를 직접 사용하고싶다면?
/*
string[] inputData = Console.ReadLine().Split();
string A = inputData[0];
string B = inputData[1];
int numA = int.Parse("" + A[2] + A[1] + A[0]);
int numB = int.Parse("" + B[2] + B[1] + B[0]);
Console.WriteLine(Math.Max(numA, numB));
*/

문제를 풀기 전에 의사코드를 작성하면서 다양한 접근 방법을 생각해 보았다.
그 과정에서 문자열을 직접 교환하는 방법과 Reverse()를 사용하는 방법 등 여러 가지 해결 방식을 떠올릴 수 있었고, 문제를 해결하는 과정에서 각 방법의 장단점도 함께 고민해 볼 수 있었다.
'코딩 테스트 > 백준' 카테고리의 다른 글
| 백준 - [단계별로 풀어보기 문자열] 5622 다이얼 (0) | 2026.03.12 |
|---|---|
| 백준 - [단계별로 풀어보기 문자열] 11718 그대로 출력하기 (0) | 2026.03.11 |
| 백준 - [단계별로 풀어보기 문자열] 1152 단어의 개수 (0) | 2026.03.11 |
| 백준 - [단계별로 풀어보기 문자열] 2075 문자열 반복 (0) | 2026.03.10 |
| 백준 - [단계별로 풀어보기 문자열] 10809 알파벳 찾기 (0) | 2026.03.08 |