본문 바로가기
알고리즘/koreatech

1027: 인접한 문자 제거하기 HARD

by cjw.git 2020. 12. 10.

Link : judge.koreatech.ac.kr/problem.php?id=1027


1. 문제

  • 다음과 같이 인접한 문자를 모두 제거하는 기능을 구현하세요.
    문자열 S  주어질 ,
        1. S[i] == S[i+1]  가장 작은 i  찾습니다.
        2. S[i]  S[i+1]  제거합니다.
        3. S[i] == S[i+1]  i  존재하지 않을 때까지 반복합니다.
    예를 들어,
    입력 문자열 S  SIEEILLL 이라면 위의 과정을 통해 아래 순서대로 변하게 됩니다.
    SIEEILL -> SIILL -> SLL -> S
    위의 과정이 완료된  남은 문자열을 답으로 출력합니다.

 


2. 문제의 조건

  • 1 <= T <= 100
  • 1 <= len <= 100,000
  • 영문 대문자로만 구성 됨.

 


더보기

3. 문제 접근

  • 시간 복잡도

    1시간제한 1초에 100개의 테스트에 10만길이로 주어진 문제입니다. O(N^1.14)이내에 풀어야합니다.

 

  • 아이디어

    1. 같은 문자열이 사라질 때 까지 중복을 제거하자.
    이는 O(N^2)의 시간이 소요되어 시간초과가 날 것 입니다.

    2. Stack을 이용하여 중복을 제거하자.
    스택은 O(N)의 시간이 소요되어 이 문제를 풀기에 적합하다고 생각합니다.

 


4. 풀이 방법

  • 문자열 s를 앞글자부터 넣어줍니다.
  • 만약 stack의 size가 1보다 작으면 그냥 데이터를 추가시켜줍니다.
  • 이후 들어온 문자와 stack의 맨 마지막 요소를 비교하여 같으면 pop으로 빼주고
    다르면 그냥 추가시킵니다.
    ※ stack의 pop(), pop(-1)은 O(1)이다. 다만 pop(idx)일 경우 O(N)이 소요된다.

 


5. 소스코드

 


 

cjw.git@gmail.com

'알고리즘 > koreatech' 카테고리의 다른 글

1035: 최소 이동거리  (0) 2020.12.11
1030: 한번 주식 거래하기  (0) 2020.12.10
1025: 단색이 좋아좋아  (0) 2020.12.10
1021: 연속된 최장 길이  (0) 2020.12.10
1019: 숫자 바꿔치기  (0) 2020.12.10

댓글