백준 25594 HG 음성기호 JAVA

sundays·2022년 9월 19일
0

문제

HG 음성기호

풀이

틀린 풀이

	final static String[] arr = { "aespa", "baekjoon", "cau", "debug", "edge", "firefox", "golang", "haegang", "iu",
            "java", "kotlin", "lol", "mips", "null", "os", "python", "query", "roka", "solvedac", "tod", "unix",
            "virus", "whale", "xcode", "yahoo", "zebra" };

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String answer = str;
        for (int i = 0; i < arr.length; i++) {
            if (str.contains(arr[i])) {
                str = str.replaceAll(arr[i], "");
                char c = (char) (i + 97);
                answer = answer.replaceAll(arr[i], c + "");
            }
        }
        if (!str.isEmpty()) {
            System.out.println("ERROR!");
        } else {
            System.out.println("It's HG!");
            System.out.println(answer);
        }
    }

아마도 시간초과 코드이다.
보니까 for문 안에있는 contains함수가 버퍼를 먹는거 같다. 안 그래도 contains 쓰고 싶지 않았는데 CPC 대회 종료 1시간전에 잠에서 깨서 갑자기 부랴부랴 하려니까 도저히 머리가 돌아가지 않았다 너무 숙면했음
대회후에 다른 분들 코드를 좀 보니까 자리수로 substr 코드를 한거를 훔쳐 봤다 cpp 코드였는데 코드 난이도는 그렇게 높지 않았다

  1. 입력해준 str 의 길이보다 검사해야할 인덱스가 커질때 탈출한다
  2. 검사 인덱스가 a인 경우 nato array 의 0번째에 해당하는 것과 비교를 해야하므로 - 97 또는 -'a' 로 인덱스를 구해야 한다
  3. 2에서 구한 인덱스에 해당하는 nato array와 현재 startwith로 확인하고 일치하면 nato array value로 대입해주면 된다
  4. 만약 일치하지 않으면 바로 break로 탈출해서 더이상 while 문을 돌지 않도록 하자
		while (curr < str.length()) {
            int idx = str.charAt(curr) - 97;
            int natoLength = nato[idx].length();

            if (natoLength > str.length() - curr) {
                System.out.println("ERROR!");
                System.exit(0);
            }
            String tmp = str.substring(curr, curr + natoLength);
            if (tmp.equals(nato[idx])) {
                curr += natoLength;
                answer.append((char) (idx + 97) + "");
            } else {
                System.out.println("ERROR!");
                System.exit(0);
            }
        }

전체 코드

전체 코드

profile
develop life

0개의 댓글