TIL_20230525

·2023년 5월 25일

TIL # WIL

목록 보기
9/65

내일배움캠프 9일차, 자바스크립트 문법 종합반 강의 듣기

第9天

오늘은 별 다른 특강없이 JS 문법 종합반 강의만 들었다. 정말 3주차부터 내용 어려워진다더니 진짜 그랬다. 확실히 기본 개념이 좀 없으니까 약간 이해되는데 확실히는 안되고 내 감으로 이해하는 느낌이랄까.
그래도 중간에 스택, 큐는 자료구조 때 배워서 익숙했다 홍홍홍
아 그리고 '혼자 공부하는 자바 스크립트' 책도 배송이 왔다. 잠깐 훑어보는데 흠 ,,, 근데 진짜 혼공스 하는 사람들을 위해 유튜브 강의도 있다던데 친절한 책인 거 같다.
아무튼 그래서 다음주부터는 9시에 퇴실하고 나서 추가 스터디 개념으로 혼공스 책 공부랑 알고리즘 문제 같이 풀어나갈 계획이다.
부디 계획대로 되기를 😴


JavaScript 문법 종합반 강의 2주차

사실 어제 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에 저장하는 것은 무슨 차이가 있을까 ?
    한 번 알아봐야겠다 ㅎㅋ


JavaScript 문법 종합반 강의 3주차

.

0개의 댓글