내일배움캠프 9일차, 자바스크립트 문법 종합반 강의 듣기
오늘은 별 다른 특강없이 JS 문법 종합반 강의만 들었다. 정말 3주차부터 내용 어려워진다더니 진짜 그랬다. 확실히 기본 개념이 좀 없으니까 약간 이해되는데 확실히는 안되고 내 감으로 이해하는 느낌이랄까.
그래도 중간에 스택, 큐는 자료구조 때 배워서 익숙했다 홍홍홍
아 그리고 '혼자 공부하는 자바 스크립트' 책도 배송이 왔다. 잠깐 훑어보는데 흠 ,,, 근데 진짜 혼공스 하는 사람들을 위해 유튜브 강의도 있다던데 친절한 책인 거 같다.
아무튼 그래서 다음주부터는 9시에 퇴실하고 나서 추가 스터디 개념으로 혼공스 책 공부랑 알고리즘 문제 같이 풀어나갈 계획이다.
부디 계획대로 되기를 😴
사실 어제 TIL에 올릴 계획이었는데 어제 해결하지 못해서 오늘 올림.
이것은 강의 2주차 안에 있는 숙제이다.
어제 진짜 하루종일 풀었는데 해결을 못했음. 오늘도 오전에 하루종일 풀다가 매니저님이 진도 나가는게 더 중요하다고 하셔서 바로 숙제 버리고 3주차 진도 나갔다 ㅋㅋㅋㅋㅋ
그렇다고 숙제를 끝마치지 않은 건 아님.
2주차 숙제를 문-해-시-알로 리뷰해보겠다.
일단 문제가 '인덱스 n에 해당하는 문자에 맞춰 문자열 배열을 사전 순대로 오름차순 정렬'하는 것이었다.
1주차 풀 때도 느낀 건데 정말 컴퓨터적 사고로 문제를 풀어가는게 가장 어렵다. 다행히도 이번 숙제에서는 문제풀이 팁이 있었다.
그 결과 엄청나게 고민에 고민을 하다가
function solution(strings, n) {
var answer = [];
// 1. 각 문자열 맨 앞에 인덱스 n에 해당하는 문자를 추가한다.
// 1-1. concat()으로 문자 추가
for (let i = 0; i < strings.length; i++) {
strings[i] = strings[i][n].concat(strings[i]);
}
// 2. 배열을 정렬해준다.
// 2-2. sort()으로 오름차순 배열 정렬
strings.sort();
// 3. 정렬된 배열의 가장 앞글자를 땐다.
// ???????????????
return answer;
}
이렇게까지 왔는데 3. 코드가 문제였다. 처음에는 substr()이나 slice()로 구현했는데 그러면 각 문자열의 가장 긴 길이를 알고있어야해서 문제였다. 여기가 막히는데 또 안풀려서 엄청 고민을 하다가 결국엔 이 부분 정답코드를 봤는데 와 replace()와 push()를 함께 쓰다니 ...
그래서 일단 push() 안 쓰고 replace()로만 구현했더니 됐다.
// 3. 정렬된 배열의 가장 앞글자를 땐다.
// 3-3. repalce()
for (let j = 0; j < strings.length; j++) {
answer[j] = strings[j].replace(strings[j][0], "");
}
제일 앞 문자를 ""로 대체하면 되다니 .......
아래는 정답 코드이다.
function solution(strings, n) {
let result = [];
// 문자열 가장앞 글자 붙인 문자 배열 만들기
for (let i = 0; i < strings.length; i++) {
strings[i] = strings[i][n] + strings[i];
}
// 문자열 사전순 정렬
strings.sort();
// 앞글자 제거 후 리턴
for(let j = 0; j < strings.length; j ++) {
strings[j] = strings[j].replace(strings[j][0],"");
result.push(strings[j]);
}
return result;
}
여기서 배운 거
나는 문자열에 concat() 사용해서 문자를 추가했는데 여기서는 단순히 +연산자를 통해 문자를 더해주었다. 왜냐하면 +연산자는 숫자(다른 자료형도)를 문자로 바꿔서 계산해주기 때문이다. 라고 1주차 수업 때 배웠는데 이렇게 써먹을 수도 있다니... 단순히 연산자 개념 공부라고 생각했는데 이런데서 적용되는게 신기했다.
여기서 든 의문
정답 코드 처럼 result에 strings를 push() 하는 것과
내가 한 것처럼 push() 하지 않고 바로 result에 저장하는 것은 무슨 차이가 있을까 ?
한 번 알아봐야겠다 ㅎㅋ
.