본문 바로가기
PS/AtCoder

[ABC259] C - XX to XXX (AtCoder Beginner Contest 259 in Java)

by Nahwasa 2022. 7. 11.

문제 : abc259_c

 

  내 경우엔 String을 다음과 같이 압축시켜서 판단했다.

abbaac => a1 b2 a2 c1

abbbbaaac => a1 b4 a3 c1

 

위와 같이 압축시킬 경우, 다음과 같이 판단할 수 있다.

1. 압축시킨 갯수가 다를 경우 No (예를들어 a1 b2 c2 vs a1 b2 였다면 3개와 2개로 비교해볼 것도 없이 No 이다.)

2. 압축시킨 부분에서 문자 부분이 서로 다른 경우 No (예를들어 a1 b1 c1 vs a1 d1 c1)

3. 압축시킨 각 부분에서 숫자가 S를 압축시킨쪽이 더 큰 경우 No (예를들어 a2 vs a1)

4. 압축시킨 각 부분에서 숫자가 서로 다른데, S가 1인 경우 No (예를들어 a1 vs a2)

5. 이외의 경우 Yes

 

코드 : github

...
private ArrayList<int[]> analysys(String s) {
    ArrayList<int[]> arr = new ArrayList<>();
    int[] bf = new int[2];
    bf[0] = s.charAt(0);
    bf[1] = 1;
    for (int i = 1; i < s.length(); i++) {
        if (s.charAt(i) == bf[0]) {
            bf[1]++;
            continue;
        }
        arr.add(bf);
        bf = new int[2];
        bf[0] = s.charAt(i);
        bf[1] = 1;
    }
    arr.add(bf);
    return arr;
}
private void solution() throws Exception {
    String s = nextLine();
    String t = nextLine();
    ArrayList<int[]> arrS = analysys(s);
    ArrayList<int[]> arrT = analysys(t);
    if (arrS.size() != arrT.size()) {
        System.out.println("No");
        return;
    }
    for (int i = 0; i < arrS.size(); i++) {
        int[] tmpS = arrS.get(i);
        int[] tmpT = arrT.get(i);
        if (tmpS[0] != tmpT[0] || tmpS[1] > tmpT[1] || tmpS[1] != tmpT[1] && tmpS[1] == 1) {
            System.out.println("No");
            return;
        }
    }
    System.out.println("Yes");
}
...

댓글