Algorithm/[BOJ]

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

정보통신 고심이 2024. 3. 26. 13:46

https://www.acmicpc.net/problem/2941

 

접근 방법

1) 문자열 입력 받기

2) "li", "nj", "dz" : 한글자로 count / "-", "=" 글자수에서 제외 

 

접근 코드

import java.io.*;

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 count = 0; 
       
       for(int i=0; i<input.length(); i++) {
    	   if(input.indexOf("li") == 1) {
    		   count++;
    	   }
    	   if(input.indexOf("nj") == 1) {
    		   count++;
    	   }
    	   if(input.indexOf("dz") == 1) {
    		   count++;
    	   }
    	   if(input.indexOf("-") == 1) {
    		   
    	   }
    	   if(input.indexOf("=") == 1) {
    		 
    	   }
    	   else
    		   count++;
       }
       
       bw.write(String.valueOf(count));
       
        
       br.close();
       bw.flush();
       bw.close();
       }
    
}

틀린 이유 : indexOf() 메소드는 문자열에서 특정 문자열이나 문자의 첫 번째 인덱스를 반환하기에 "li", "nj", "dz"에는 사용 X

 

 

정답 코드

import java.io.*;

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 count = 0; 
       
       for(int i=0; i<input.length(); i++) {
    	   char ch = input.charAt(i);
    	   
    	   if(ch =='c') {
    		   if(i<input.length()-1) {
    			   if(input.charAt(i+1)=='-') {
    				   i++;
    			   }
    			   else if(input.charAt(i+1)=='=')
    				   i++;
    		   }
    	   }
    	   
    	   if(ch =='d') {
    		   if(i<input.length()-1) {
    			   if(input.charAt(i+1)=='z') {
    				   if(i<input.length()-2) {
    					   if(input.charAt(i+2)=='=') { // dz=
    						   i = i+2;
    					   }
    				   }
    			   }
    			   else if(input.charAt(i+1)=='-') // d-
    				   i++;
    		   }
    	   }
    	   
    	   if(ch =='l') {
    		   if(i<input.length()-1) {
    			   if(input.charAt(i+1)=='j') { // lj
    				   i++;
    			   }
    		   }
    	   }
    	   
    	   if(ch =='n') {
    		   if(i<input.length()-1) {
    			   if(input.charAt(i+1)=='j') { // nj
    				   i++;
    			   }
    		   }
    	   }
    	   
    	   if(ch =='s') {
    		   if(i<input.length()-1) {
    			   if(input.charAt(i+1)=='=') { // s=
    				   i++;
    			   }
    		   }
    	   }
    	   
    	   if(ch =='z') {
    		   if(i<input.length()-1) {
    			   if(input.charAt(i+1)=='=') { // z=
    				   i++;
    			   }
    		   }
    	   }
    	   
    	   count++; // else
       }
    
       bw.write(String.valueOf(count));
          
       br.close();
       bw.flush();
       bw.close();
       }
    
}

크로아티아 알파벳의 모든 경우의 수를 if 조건문으로 따져야한다. 

 

참고한 블로그 : https://st-lab.tistory.com/68