hahn

단계별로 풀어보기(문자열 - 그룹 단어 체커) 본문

코딩테스트 연습/백준(JAVA)

단계별로 풀어보기(문자열 - 그룹 단어 체커)

hahn 2021. 8. 23. 14:59
728x90
반응형

import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
        
        int insertWord = sc.nextInt(),
            answer = 0,
            strArrLength;
        
        String word;
        
        char compare;
        
        boolean check;
        
        String[] strArr;
        
        for(int i = 0; i < insertWord; i++){
            
            check = true;
            
            word = "A" + sc.next() + "A";
            
            for(int j = 0; j < 26; j++){
            	
                compare = (char) (97 + j);
                
                strArr = word.split(Character.toString(compare));
                
                strArrLength = strArr.length;
                
                if(strArrLength == 2) continue;
                
                for(int k = 0; k < strArrLength; k++) {
                	
                	
                	if(strArr[k].isEmpty()) strArrLength-- ;
                	
                }
                
                if(!(strArrLength == 2 || strArrLength == 1)) check = false; 
                
            }
            
            if(check) answer++;
            
        }
        
        System.out.println(answer);
        
    }
    
}

틀린 코드

 

이게 왜 틀렸나 반례를 찾아보고 있었는데

 

gooooood를 넣어보니 답이 예상과 다르게 나오는 걸 확인했다.

 

그래서 중간중간 출력해보면서 답을 찾아봤는데

 

또 같은 실수를 저질렀던 거였다......

 

for(int k = 0; k < strArrLength; k++) {
                	
                	
	if(strArr[k].isEmpty()) strArrLength-- ;
                	
}

이 부분 조건식에 strArrLength를 for 문안에서 감소하게 해놓고

 

조건으로 써버리니 문제가 됐던 거다.

 

분명 코드 작성할 때 strArrLength랑 strArr.length 중 뭐 쓸지 고민했었는데....

 

그냥 상관없겠지 하면서 strArrLength를 넣은 게 문제였다.

 

strArrLength를 strArr.length를 바꿔주니 정상적으로 실행됐다.

더보기
import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
        
        int insertWord = sc.nextInt(),
            answer = 0,
            strArrLength;
        
        String word;
        
        char compare;
        
        boolean check;
        
        String[] strArr;
        
        for(int i = 0; i < insertWord; i++){
            
            check = true;
            
            word = "A" + sc.next() + "A";
            
            for(int j = 0; j < 26; j++){
            	
                compare = (char) (97 + j);
                
                strArr = word.split(Character.toString(compare));
                
                strArrLength = strArr.length;
                
                if(strArrLength == 2) continue;
                
                for(int k = 0; k < strArr.length; k++) {
                	
                	
                	if(strArr[k].isEmpty()) strArrLength-- ;
                	
                }
                
                if(!(strArrLength == 2 || strArrLength == 1)) check = false; 
                
            }
            
            if(check) answer++;
            
        }
        
        System.out.println(answer);
        
    }
    
}

정신 차리자

728x90
반응형