[백준]2941번: 크로아티아 알파벳(Java)

ywwwon01·2022년 7월 15일
2

알고리즘

목록 보기
4/13
post-thumbnail

문제

🔗 2941번: 크로아티아 알파벳

첫 번째 시도(런타임 에러)

code

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String input = br.readLine();
        int cnt = 0;

        for (int i = 0; i < input.length(); i++) {
            if (input.charAt(i) == 'c') {
                if (input.charAt(i + 1) == '=' || input.charAt(i + 1) == '-') i++;
            }
            else if (input.charAt(i) == 'd') {
                if (input.charAt(i + 1) == 'z') {
                    if (input.charAt(i + 2) == '=') i += 2;
                }
                else if (input.charAt(i + 1) == '-') i++;
            }
            else if (input.charAt(i) == 'l') {
                if (input.charAt(i + 1) == 'j') i++;
            }
            else if (input.charAt(i) == 'n') {
                if (input.charAt(i + 1) == 'j') i++;
            }
            else if (input.charAt(i) == 's') {
                if (input.charAt(i + 1) == '=') i++;
            }
            else if (input.charAt(i) == 'z') {
                if (input.charAt(i + 1) == '=') i++;
            }

            cnt++;
        }

        bw.write(String.valueOf(cnt));
        bw.flush();
    }
}

review

이녀석은..

로컬에서 테스트했을 때는 정상 작동 되는 듯이 보였습니다만

StringIndexOutOfBounds 에러가 났네요

조건문 안에서

.charAt(i + 1)이나 .charAt(i + 2) 처럼 범위 밖의 요소에 접근하려고 해서 그런 것 같습니다..

두 번째 시도

code

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        String input = br.readLine();
		int cnt = 0;
 
		for (int i = 0; i < input.length(); i++) {
			if(input.charAt(i) == 'c' && i < input.length() - 1) {
				if(input.charAt(i + 1) == '=' || input.charAt(i + 1) == '-') i++;		
			}
			else if(input.charAt(i) == 'd' && i < input.length() - 1) {
				if(input.charAt(i + 1) == '-') i++;
				else if(input.charAt(i + 1) == 'z' && i < input.length() - 2) {
					if(input.charAt(i + 2) == '=') i += 2;
				}
			}
			else if((input.charAt(i) == 'l' || input.charAt(i) == 'n') && i < input.length() - 1) {
				if(input.charAt(i + 1) == 'j') i++;
			}
			else if((input.charAt(i) == 's' || input.charAt(i) == 'z') && i < input.length() - 1) {
				if(input.charAt(i + 1) == '=') i++;
		    }
			cnt++;
		}

        bw.write(String.valueOf(cnt));
        bw.flush();
    }
}

review

조건문에

i < input.length() - 1이나 i < input.length() - 2와 같은 조건을 추가해서

StringIndexOutOfBounds 에러를 피할 수 있도록 수정해주었더니

정상적으로 채점된 것을 볼 수 있었습니다!

오늘의 실수..💦

뒤에 접근할 게 없으면

알아서 어련히 처리할 수 있을 거라고 생각해버렸네요..

조심해야겠습니다..

이상입니다.

profile
생각의 전개를 공유합니다.

0개의 댓글