본문 바로가기
with my rubber duck/codingTest

[백준 1316] 그룹단어 체크 + 복습 !!

by stilinski 2022. 7. 12.
728x90
import java.util.Scanner;
class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int cnt=N;

        for(int i=0;i<N;i++){
            String s = sc.next();
            boolean chk[] = new boolean[26];
            for(int j=0;j<s.length()-1;j++){
                if(s.charAt(j)!=s.charAt(j+1)){
                    if(chk[s.charAt(j+1)-97]==true){
                        cnt--;
                        break;
                    }
                }
                chk[s.charAt(j)-97]=true;
            }

        }
        System.out.println(cnt);
    }
}​

ㅋㅋㅋ

코드가 좀 비효율적으로 보이긴 하지만 그래도 혼자 풀었음 

오랜만에 백준 풀어서 답을 어떤식으로 제출해야하는지 헷갈려서 옛날에 푼 거 참고함.

컴파일 에러 엄청많이 남;;;; ㅋㅋ

그래도 실전 코테를 위해 최대한 ide안써보는중..

 

 

+ 0716 복습

사실 전에푼건 좀 얻어걸린거에 가깝다.

ㅋㅋㅋ

나는 받은 문자열의 첫번째 문자와 3번째 문자를 비교했는데 같고 && 중간문자인 2번째 문자가 다르다면 그건 그룹문자가 아니기때문에 (ex) aba) false를 반환하는 식으로 그냥 큰 생각없이 코드를 짰고 테스트겸 제출했는데 통과됨ㅋ

근데 오늘 디버깅해보니 내 로직은 그거보다 더 정교했음ㅋㅋㅋㅋ 

 

 

오늘 복습할겸 다른 사람들 코드를 보는데 다들

boolean[26] 이럼서.. 이상한 배열을 쓰는것임.

도대체 저게 뭐지 했는데 이제 알아냄.

a-z까지의 개수가 26이라서 26이라고 한 거 였음.

그래서 나도그런식으로 해봄

 

import java.util.Scanner;
class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int cnt=N;

        for(int i=0;i<N;i++){
            String s = sc.next();
            boolean chk[] = new boolean[26];
            for(int j=0;j<s.length()-1;j++){
                if(s.charAt(j)!=s.charAt(j+1)){
                    if(chk[s.charAt(j+1)-97]==true){
                        cnt--;
                        break;
                    }
                }
                chk[s.charAt(j)-97]=true;
            }

        }
        System.out.println(cnt);
    }
}

boolean배열을 이런식으로 활용할 수 있다는 것을 배웠다는게 큰 수확임

 

근데 이거나 내가 원래 했던거나 속도는 비슷함.

내가 어떨결에 발견한 로직도 나름 괜춘한듯..? 뭔가 쓸데없는 확인이 더 늘겠지만.

 

728x90

댓글