코딩 테스트/백준

백준 - [단계별로 풀어보기 문자열] 2908 상수

devrabbit22 2026. 3. 11. 04:02

이번 문제는 먼저 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()를 사용하는 방법 등 여러 가지 해결 방식을 떠올릴 수 있었고, 문제를 해결하는 과정에서 각 방법의 장단점도 함께 고민해 볼 수 있었다.