반응형
[처음 푼 풀이]
function solution(s) {
const strCount = s.length;
if(strCount % 2 === 0){ s.substr(i,2) }
else{ s.substr(i,1) }
}
1. 노트에 끄적일 때 홀수는 s.substr(i ,2) 짝수는 s.substr(i, 1) 규칙 찾음
2. 근데 앞에 i 는 어떻게 설정 ???? (너무 어렵고 직관적으로 생각함)
[두번째 풀이]
function solution(s) {
const answer = "";
if (s.length % 2 === 0) {
answer = s[s.length / 2 - 1] + s[s.length / 2];
} else {
answer = s[Math.floor(s.length / 2)];
}
return answer;
}
1. 문자를 자꾸 메서드로 받으려고 한 나를 매우 쳐야 함
2. []를 사용해 문자열도 받을 수 있다는 것 깨달음
[풀이]
1. answer 를 담을 변수 설정
2. 짝 / 홀 따라 설정
만약 s = 'abcd' 이면 (짝수이므로)
s.length = 4
s[s.length / 2 - 1] = s[4/2 - 1] = s[1]
s[s.length / 2] = s[4/2] = s[2]
따라서, s.length 가 4 일 때 s[1] + s[2] 반환해 answer = 'bc'
s = 'abcde' 이면 (홀수)
s.length = 5
s[Math.floor(s.length / 2)] = s[Math.floor(5/2)] = s[Math.floor(2.5)] = s[2]
이 때, Math.floor 은 반내림 해주므로 2.5 = 2 가 됨
결국 s.length 가 5 일 때 s[2] 이므로 answer = 'c' 가운데 문자 반환
[ 풀이 조언 ]
function solution(s) {
const midIdx = Math.floor(s.length / 2);
let answer = "";
if (s.length % 2 === 0) {
answer = s[midIdx - 1] + s[midIdx];
} else {
answer = s[midIdx];
}
return answer;
}
매번 s.length / 2 를 써주는 것 보다 midIdx 로 변수 설정해 반복을 줄이는 것이 훨씬 깔끔!
+ 더 깔끔한 구현
function solution(s) {
const averageIdx = Math.floor(s.length / 2);
if (s.length % 2 === 0) {
return s[averageIdx - 1] + s[averageIdx];
}
return s[averageIdx];
}
애초에 Math.floor(s.length / 2) 를 변수에 넣고 if 문 돌리는 것이 더 깔끔함!
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 나머지가 1이 되는 수 찾기 (1) | 2022.08.23 |
---|---|
[JS] 수박수박수박수박수박수? (0) | 2022.08.22 |
[JS] 서울에서 김서방 찾기 (0) | 2022.08.22 |
[JS] 3진법 뒤집기 (0) | 2022.08.21 |
[JS] 문자열 내 p와 y의 개수 (0) | 2022.08.20 |