문제 풀이/소프티어

[소프티어] [한양대 HCPC 2023] X marks the Spot(JAVA)

27200 2025. 3. 17. 13:31

문제

https://softeer.ai/practice/7703


풀이(11분)

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String s = st.nextToken();
            String t = st.nextToken();
            t = t.toUpperCase();

            // 'x' 또는 'X'의 위치 찾기
            int idx = s.toLowerCase().indexOf('x');

            // 'x' 또는 'X'가 없거나 잘못된 인덱스일 경우 예외 처리
            if (idx == -1 || idx >= t.length()) {
                return;
            }

            char tChar = t.charAt(idx);

            sb.append(tChar);
        }

        System.out.println(sb);
    }
}

문제 풀이 전략

 

500,000개의 문자 입력이 가능하고, 최대 100만까지의 총 문자열의 길이가 주어진다.

 

즉, O(N) 탐색을 하더라도 100만번의 계산만 이루어지기에 indexOf를 사용하여도 문제가 없다고 판단했다.

 

로직은 간단하다.

 

1. 먼저 idx를 찾기 위해 s문자열을 소문자로 모두 치환한 뒤 x의 인덱스를 찾는다.

2. t를 모두 대문자로 변경해둔다.(어차피 t의 인덱스만 통하여 대문자로 반환할 것이기 때문이다.)

3. 모인 문자열을 출력한다.