프로그래머스 - 2020_Kakao_Blind_Recruitment_문자열 압축(JavaScript)
https://school.programmers.co.kr/learn/courses/30/lessons/60057
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 첫 번째 풀이
- 제출 시 테스트 5번은 실패, 5번을 제외한 나머지는 통과. 결과적으로 실패 ..
- 우선 코드에 대한 설명 전에 이 문제를 substr()을 이용하여 풀려고 하였다.
- 하지만, MDN Docs에 substr()을 검색한 결과 아래와 같은 경고 창이 떠있는게 아닌가 ..?
substr()
- 이 경고를 읽은 나는 .. 아직까지는 substr() 메서드는 사용 가능하지만, 언젠가는 사라진다는 의미로 받아들였다.
- 그래서 나는 언젠가 이 문제를 다시 보게 될 날에 substr() 메서드가 사라지고 나서 이 코드를 다시 실행시켰을 때 돌아가지 않는다면 다시 코드를 짜야하는 번거로움이 생길 것 같아 substr() 대신 slice()를 사용하여 문제를 풀었다.
- 6번째 줄 : prev는 반복되는 문자열을 찾기 위한 즉, 비교 대상 문자열을 의미한다.
- 7번째 줄 : count는 문자열이 얼마나 반복되는지 계산하기 위한 변수이다. 문자열이 반복되지 않아도 그 문자열은 그대로 써줘야 하기 때문에 1로 설정해주었다.
- 8번째 줄 : reducedS는 문자열을 압축하여 표현한 문자열을 의미한다.
- 10 ~ 11번째 줄 : tempI와 tempJ는 slice() 메서드를 사용하여 문자열을 자를 때 사용하는 변수이다.
- 12번째 줄 : temp는 비교 할 문자열을 의미한다. 즉, prev와 비교할 문자열이 이곳에 들어가게 된다.
- 20 ~ 22번째 줄 : 만약, 비교 대상 문자열(prev)과 비교할 문자열(temp)이 같다면 count를 증가시켜준다.
- 22 ~ 32번째 줄 : 만약, 비교 대상 문자열과 비교할 문자열이 다를 때 count에 따라 분기를 나눠줬는데,
count가 1이라면 비교 대상 문자열(prev)를 그대로 reducedS에 더해주고,
count가 1보다 크다면 반복되는 횟수(count) + 비교 대상 문자열(prev)를 해주게 된다.
이 때, 중요한 것은 count를 1로 리셋시켜주는것과, 비교 대상 문자열(prev)를 비교할 문자열(temp)로 바꿔주는 작업이다. 바꿔주는 이유는 기존 비교 대상 문자열은 이미 반복이 끝났고, 반복이 끝났으니 그 다음 문자열이 얼마나 반복되는지(count) 계산해줘야 하기 때문이다. - 34 ~ 38번째 줄 : 마지막으로 반복되는 문자열은 그 다음 비교할 문자열이 없기 때문에, 마지막으로 반복되는 문자열 또한 reducedS에 넣어주기 위한 코드이다.
예를들어, 입력에 "aabbaccc"가 들어왔을 때, 이 코드가 없다면 reducedS에는 "2a2ba"까지만 들어가 있다.
따라서, 3c를 reducedS에 넣어주어야 하기 때문에 이 코드가 필요한 것이다. - 39번째 줄 : 문자열을 압축하여 표현한 모든 문자열의 길이를 answer라는 배열에 차곡차곡 넣어준다.
- 42번째 줄 : 위에서 압축 표현한 모든 문자열의 길이를 넣어준 배열 answer에서 최솟값을 찾는다.
나의 두 번째 풀이
- 문제 조건에서 s의 길이는 1이상이라고 되어있었지만, 혹시나 하는 마음에 s에 "" 즉, 빈 문자열을 넣어주니 Infinity가 나왔다.
- 그래서, s의 길이가 0일 때 0을 반환하는 코드를 넣어주고 다시 제출하였으나 역시나 실패 ..
- 이후, s의 길이를 1 ~ 10까지 설정하여 아무 문자열이나 넣어주었는데,
s의 길이가 1일 때 Infinity가 반환이 되고, 2 ~ 10까지는 제대로 반환되었다. - 위에서 s의 길이가 1일 때 Infinity가 나오면 안되기 때문에 s의 길이가 1일때 1을 반환하도록 코드를 짯다.
- 마무리된 코드는 아래와 같다.
느낀점
- 이전까지 substr() 메서드를 잘 사용해왔었는데, 문득 MDN에 검색해 보니 곧 사라진다는 경고를 보고 앞으로는 자주 MDN Docs에서 메서드를 검색해봐야겠다는 생각이 들었다.
- 코드를 다 작성하고 나서 마무리된 코드를 다시 보니 억지(?)로 짠 코드라는 생각이 들었다.
- 마무리 된 코드보다 더 간결하고 억지(?)가 없는 코드를 위해 다시 풀어볼 예정이다.
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 - 소수만들기(JavaScript) (0) | 2022.08.04 |
---|