Develop/Algorithm

우테코 온보딩 - Problem 2

IJY 2022. 11. 9. 11:28

우테코 온보딩 - Problem 2 문제 풀이

 

문제 설명

암호문을 좋아하는 괴짜 개발자 브라운이 이번에는 중복 문자를 이용한 새로운 암호를 만들었다. 예를 들어 "browoanoommnaon"이라는 암호문은 다음과 같은 순서로 해독할 수 있다.

1. "browoanoommnaon"
2. "browoannaon"
3. "browoaaon"
4. "browoon"
5. "brown"

임의의 문자열 cryptogram이 매개변수로 주어질 때, 연속하는 중복 문자들을 삭제한 결과를 return 하도록 solution 메서드를 완성하라.

제한사항
- cryptogram은 길이가 1 이상 1000 이하인 문자열이다.
- cryptogram은 알파벳 소문자로만 이루어져 있다.

 

문제의 자세한 내용은 해당 링크를 통해 확인 : 문제 링크

 

풀이 코드

package onboarding;

import java.util.List;
import java.util.stream.Collectors;

public class Problem2 {
    public static String solution(String cryptogram) {
        int count = 0;
        List<Character> charList = cryptogram.chars().mapToObj(c -> (char) c).collect(Collectors.toList());
        Character base = charList.get(0);

        for (int i = 1; i < charList.size(); ) {
            if (charList.get(i).equals(base)) {
                count += 1;
                charList.remove(i);
            } else {
                if (count == 0) {
                    base = charList.get(i++);
                } else {
                    count = 0;
                    charList.remove(--i);
                    base = charList.get(i - 1);
                }
            }
        }
        if (count != 0) {
            charList.remove(charList.size() - 1);
        }
        return charList.stream().map(String::valueOf).collect(Collectors.joining());
    }
}

 

문제 해결 전략

이라 쓰고 문제를 보고서 어떻게 풀면 될까?에 대한 생각을 정리한 항목

입력으로 들어오는 문자열을 문자 단위로 나눈 List로 변환 후 증감식을 정의하지 않은 for문을 돌면서 중복 단어 제거

base(left)와 index(i, right)에 위치한 문자를 비교

  • 같은 경우
    • index 문자를 리스트에서 제거
    • count 증가
  • 다른 경우
    • count 확인, 0인 경우 
      • base를 index 문자로 변경 후 index 1 증가
    • count 확인, 0이 아닌 경우
      • count를 0으로 초기화
      • index 1 감소 후 리스트에서 제거(base 제거 로직)
      • base를 index - 1 값으로 변경(현재 index는 비교할 문자열(right)에 위치해 있으므로 -1을 해주어야 한다)

for문을 빠져나온 후 count 확인하여 0이 아닌 경우 마지막 문자를 리스트에서 제거(마지막 base를 제거하는 로직)

이 후 리스트를 문자열로 변환하여 반환

 

정규표현식을 이용한 풀이(알고리즘 스터디원) : 깃 허브


코드를 업로드해 둔 깃 허브