회사에서 업무 한가할 때 틈틈히 코딩 문제 푸는 중, 오늘은 몇개까지 풀 수 있을까?
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
s는 길이가 1 이상, 100이하인 스트링입니다.
내가 풀었다 말하기 참...민망하다
if
문을 활용해서 하고자 했다. function solution(s) {
if (0 === s.length % 2) {
} else {
}
return answer;
}
solution("kamill");
위 상태로 한참을...1시간... 2시간 계속 가운데 인덱스 값을 추출할 수 있는 메소드도 검색도 해보고 이래저래 지지고볶다가 정말 ...모르겠다
그렇게 또 1시간....결국 나는 검색의 힘을 빌렸다.
가운데 글자 가져오기 치니까 정말 많이 나오더라..
거기서 알게된 concat
메서드
conscat
: 매개변수로 전달된 모든 문자열을 호출 문자열에 붙인 새로운 문자열을 반환한다. (출처 : MDN)빈 문자열을 가지고 있는 변수를 만들고, 그 안에 배열을 호출하는 문법대로 s[인덱스값]을 넣어줬으면 됬는데 거의 다 생각해놓고 중간에 포기한 격이 됬다
function solution(s) {
let answer = '';
if (0 === s.length % 2) { // 짝수
answer = answer.concat(s[s.length/2 -1]);
answer = answer.concat(s[s.length/2]);
} else { // 홀수
answer = answer.concat(s[Math.floor(s.length/2)]);
}
return answer;
}
solution("kamill");
Math.floor
: 소수점 이하를 버림한다.근데 이렇게 해결하고 let answer = '';
이걸 지우고 if
문 안에서 선언했더니 오류가 났다.
function solution(s) {
if (0 === s.length % 2) {
let answer = answer.concat(s[s.length/2 -1]);
answer = answer.concat(s[s.length/2]);
} else {
answer = answer.concat(s[Math.floor(s.length/2)]);
}
return answer;
}
solution("kamill");
ReferenceError [Error]: Cannot access 'answer' before initialization
오류가 난 이유는 아마도 hoisting 관련이지 않을까 생각하고 있다.
내맘대로 이해하기
hoisting
: 변수 및 함수 선언이 되기 전에 호출해도 오류 없이 코드가 실행되는 것그래서 var
를 한번 사용해봤는데.. 이번엔 또 새로운 오류
function solution(s) {
if (0 === s.length % 2) { // 짝수
var answer = answer.concat(s[s.length/2 -1]);
answer = answer.concat(s[s.length/2]);
} else { // 홀수
answer = answer.concat(s[Math.floor(s.length/2)]);
}
return answer;
}
TypeError [Error]: Cannot read property 'concat' of undefined
아무래도 저렇게 변수 선언과 함께 concat
메소드를 사용하는게 문제인 듯 하다.
하지만 아직 잘 이해가 가지는 않는다. 역시 혼자하는 공부는 어렵다.
이번 문제에 대한 다른 사람의 풀이는 봐도 어렵고 처음 보는 코드가 많이 보였다.
계속 느끼지만, 이거 Level1 초보자 분들만 푸는거...맞나? ...🤣
난 대체 얼마나 생초보인거지..
(속닥속닥) 프로그래머스 알고리즘 문제 레벨 나눈 기준은 사실 저도 공감하지 못한다는.. 힘내세요!