230613 TIL #110 연속글자 삭제 문제

김춘복·2023년 6월 13일
0

TIL : Today I Learned

목록 보기
110/550

230613 Today I Learned

코테를 치고 기억나는 문제를 복기하는 시간을 가졌다.


연속 삭제 문제

  • 문제
    : String 문자열과 각각의 글자에 대응하는 int[] 배열이 주어지고 int 배열에서 가장 작은 숫자 cost를 써서 연속된 글자를 제거하는 문제였다.

  • 시도
    : 문제가 영어로 되어있어 잘못 이해해서 연속글자가 아니라 중복글자일 시 모두 제거로 이해했었다.
    그래서 HashMap<Character, Integer>로 key에 글자, value에 숫자를 넣고 구현했었지만 테스트 케이스에 실패했었다.

  • 해결
    : 테스트케이스를 좀 더 자세히 보고 영어를 다시 해석해보니 중복글자가 아니라 연속글자였다.
    그래서 구현한 걸 다 지우고 간단하게 누적합으로 구현했다.

  public int solution(String s, int[] n){
    int sum = 0;

    for (int i = 0; i < s.length()-1; i++) {
      char a = s.charAt(i);
      char b = s.charAt(i+1);
      if (a==b){
        if (n[i]>n[i+1]){
          sum += n[i+1];
          n[i+1] = n[i];
        } else {
          sum += n[i];
        }
      }
    }
    return sum;
  }
  • 구현하면서 끝글자의 경우 s.charAt(i+1)를 하면 index 범위를 초과하는 에러가 발생해서 이부분을 어떻게 구현할까 고민을 많이 했는데 그냥 반복문 범위를 i < s.length()-1;로 지정하면 되는거였다.

  • 간단하게 int sum으로 cost 적은 값을 계속 누적합처리해주면 되는 문제였다.

  • 알게된 점
    : 특히 영어로된 문제는 너무 어렵게 생각하지말고 찬찬히 문제 파악부터 하자.
    테스트 케이스 하나하나 보면서 내가 이해한게 맞는지 확인하는 과정이 꼭 필요하다!

profile
Backend Dev / Data Engineer

0개의 댓글