본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[프로그래머스] level 2 문자열 압축(파이썬/자바스크립트)

by codingBear 2022. 12. 13.
728x90
반응형

이번 글은 '이것이 취업을 위한 코딩테스트다' 내의 문제를 풀고 정답 코드를 정리한 것입니다.

 

이것이 취업을 위한 코딩 테스트다 with 파이썬 | 나동빈 - 교보문고

이것이 취업을 위한 코딩 테스트다 with 파이썬 | IT 취준생이라면 누구나 입사하고 싶은 카카오ㆍ삼성전자ㆍ네이버ㆍ라인! 취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생이라면 누구나

product.kyobobook.co.kr

 

이번 문제는 아래 링크에 접속해서 풀어볼 수 있습니다.

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제


정답 코드

파이썬 Ver.

자바스크립트 Ver.


문제 풀이

 이 문제를 풀기 위해서는 파이썬 반복문의 range(startIndex, lastIndex, step)의 사용법을 알아야 한다. 왜냐하면 왼쪽부터 한 글자씩 문자를 차례대로 증가시키면서 증가된 문자의 길이만큼 다음 문자를 탐색하며 일치하는 문자의 개수를 구해야 하기 때문이다.

 우선 문자를 처음부터 끝까지 탐색하지 않아도 되기 때문에 반복문으로 문자의 절반까지만 탐색한다. 그 다음 이중 반복문을 돌면서 앞선 문자(prev)와 다음 문자(s[j : j + step])이 일치한다면 일치 횟수(count)를 1씩 증가시키고, 일치하지 않는다면 현재 정보를 기준으로 compressed 변수에 문자열을 합친다. 이때 count가 2 이상이라면 일치 횟수도 합쳐야 하기 때문에 count + prev를 합치고, 아니라면 prev만 합친다. 이후 prev를 다음 문자로 치환하고 count도 초기화한다.

 # 남아 있는 문자열 처리라고 되어 있는 부분이 없으면 값이 정상적으로 출력되지 않는다. 예를 들어 s = 'aabbac'일 경우 이중 반복문에서 마지막 문자를 돌릴 때 i = 3, for j in range(3, len(s), 3)이 된다. 이때 compressed = '2a2b'이며, prev = 'a'(s[-2])이다. 이중 반복문의 조건문에서 prev와 s의 마지막 인덱스에 위치한 'c'가 다르므로 compressed에 prev에 담긴 'a'가 추가되고 prev의 값이 'c'로 바뀌면서 반복문이 끝난다. 즉 compressed = '2a2ba'가 된다. 하지만 '2a2bac'를 출력해야 하므로 마지막에 c를 추가해야 하는데 이 때문에 반복문 밖에 별도의 문자열 처리 조건문이 있는 것이다.


함께 보기

아래 링크에서 문자열을 압축하는 다양한 방법을 볼 수 있다.

 

 

파이썬의 문자열 압축

파이썬의 문자열 압축 범주 잡집 | June 10, 2022 04:16 메모리 내 데이터베이스 관리 시스템(IMDBMS)을 사용하여 무엇보다도 URL 및 메시지를 압축할 수 있습니다. 문자열 압축에 대해 좀 더 자세히 살펴

ciksiti.com

 

728x90
반응형

댓글