1. 문제
programmers.co.kr/learn/courses/30/lessons/60057?language=javascript
2. 접근 방법
앞에서부터 n개씩 잘라서 같은 경우 숫자로 바꿔준다.
여기서 숫자로 바꾸다가 현재 최소 길이보다 크면은 break조건을 넣어줬따.
3. 코드
Javascript
function solution(s) {
var answer = s.length;
if (s.length === 1) {
return 1;
}
for (let i=1; i<s.length; i++) {
let temp = ''
let cnt = 1;
let prev = s.slice(0, i)
for (let j=i; j<s.length; j+=i) {
var now
if (j+i >= s.length) {
now = s.slice(j, s.length)
} else {
now = s.slice(j, j+i)
}
if (prev === now) {
cnt ++;
} else {
if (cnt > 1) {
temp += (String(cnt)+prev)
} else {
temp += prev
}
prev = now
cnt = 1
}
if (temp.length >= answer) {
break
}
}
if (cnt > 1) {
temp += (String(cnt)+now)
} else {
temp += now
}
if (temp.length < answer) {
answer = temp.length
}
}
return answer;
}
4. 마치며
파이썬이라면 ㅠ 어렵지 않았을텐데, 구현하느라 너무 오래걸렸다.
구현이 어려웠던 이유는
1. for문에서 1씩 증가하는 것만 사용하다가 -> n개씩 증가할 때 구현을 어떻게 하지 ?!?!?!? 였다.
for (let i=0; i<s.length; i++) {
}
for (let i=0; i<s.length; i+=10) {
}
여기를 참고했는데, 다시 생각해보면 i++이 i+=1이므로 i+=10인게 맞는데 ㅋㅋㅋㅋㅋㅋ 왤케 어렵게 생각한거지 나ㅠ
약간 자바스크립트에 쫄아버림;;
2. slice
파이썬은 그냥 s[:i]같이 슬라이싱이 되는데 ㅋㅋㅋㅋㅋㅋㅋ ㅠ
자바스크립트는 아니더라 ...
s.slice(0, i)처럼 시작 idx와 끝 idx를 넣어줘야한다.
당근 0이상 i미만 ..
3. now를 var로 선언
for 문 안에서 now를 let으로 선언했더니 블록 레벨에서 선언되었기 때문에 블록 레벨 스코프를 갖는 변수가 되어 .. for문을 다 돌고 나서 마지막에 남은 now를 더해주는 과정에서 더해지지 않았다 ^^
그래서 즈엉말 어쩔 수 없이 var를 썼다. (var는 최소한으로 쓰고싶은 나 ..)
4. 처음에 초기 answer 값을 최댓값으로 넣어주려고 하는데, 자바스크립트에서 최댓값은 뭐지 ????
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Number
Number에서 안전한 최대 정수는 Number.MAX_SAFE_INTEGER 라고 한다 !
근데 어차피 여기서 최댓값은 현재 문자 길이니께 구냥 했다 흥
5. 다른 사람 코드인데 .. 스트링 리터럴을 쓴 걸 보고 소오름
'Algorithm > JavaScript' 카테고리의 다른 글
[프로그래머스] 멀쩡한 사각형 (0) | 2021.05.08 |
---|---|
[프로그래머스] 오픈채팅방 (0) | 2021.05.08 |
[프로그래머스] 기능개발 (0) | 2021.05.07 |
[프로그래머스] 짝수와 홀수 (0) | 2021.05.07 |
[프로그래머스] 자릿수 더하기 (0) | 2021.05.07 |