Softeer - X marks the Spot [한양대 HCPC 2023] - Java (시간초과 해결법)

chaemin·2024년 2월 14일
0

Softeer

목록 보기
4/8

1. 문제

https://softeer.ai/practice/7703

2. 풀이

처음에 구현했는데 시간초과가 떠서 당황했다..

		String answer = "";
        
        for(int n = 0; n < N; n++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");

            String Si = st.nextToken();
            String tArr[] = st.nextToken().split("");

            Si = Si.toUpperCase();
            int sIndex = Si.indexOf("X");
            answer += (tArr[sIndex]).toUpperCase();
            //answer += (Ti.substring(sIndex, sIndex+1)).toUpperCase();
        }
        System.out.println(answer);

위에 answer 문자열에 + 식으로 했는데 이런식으로 하면 시간초과가 뜨게 된다.
아래 블로그에 왜 시간초과가 뜨는지 잘 설명되어있다.↓

https://velog.io/@myhuon/%EB%B0%B1%EC%A4%80-%EC%8B%9C%EA%B0%84%EC%B4%88%EA%B3%BC-%ED%95%B4%EA%B2%B0


Java로 문자열 구현 시 시간초과를 항상 염두해둬야한다.
StringBuilder쓰고 BufferedReader를 써야 시간초과를 피하는 것 같다.

3. 코드

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 n = 0; n < N; n++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");

            String Si = st.nextToken();
            //String Ti = st.nextToken();
            String tArr[] = st.nextToken().split("");
            
            Si = Si.toUpperCase();
            int sIndex = Si.indexOf("X");
            sb.append( (tArr[sIndex]).toUpperCase() );
            //sb.append( (Ti.substring(sIndex, sIndex+1)).toUpperCase() );
        }

        String answer = sb.toString();
        System.out.println(answer);
    }
}

0개의 댓글