항해99 Week2 WIL

강지희·2022년 3월 13일
0
post-thumbnail

무엇을 배웠나?

- JavaScript의 ES (+ ES5/ES6 문법 차이)

2주차는 알고리즘 주간이었다. 단순히 코드를 치고 구현만 하는 것을 넘어서 코드를 짜보면서 코드의 원리를 배울 수 있는 것이 좋았던 주간이다. 문법을 먼저 공부하고 푸는게 정석적이겠지만 바로 프로그래머스 알고리즘 문제들을 풀어보는 것부터 시작했다. 문제가 요구하는 것을 풀기 위해서 어떤 것들을 구해야 하는지 순서들을 쪼개보고 아는 javascript 문법은 for loop랑 .repeat() 정도라 대부분은 '문자열의 n번째 문자 가져오는 법', 'how to check if a number is an integer in js'이런식으로 구글링을 하면서 찾은 method들을 이용해 풀면서 문법에 조금 익숙해졌다. 처음 이틀은 너무 재미있어서 문제 푸는데만 집중해서 28개 문제중에 20개는 풀었고 2개는 답지를 봤고 5개는 논리적으로 맞는 풀이순서 같은데 계속 실패해서 혼자 더 풀어보고자 보류해두고 하나는 어떻게 풀지 감이 안잡혀서 더 생각해보고자 보류해뒀다.
월요일부터는 다른사람들의 풀이법을 봤는데 보면서 더 공부되는 부분들이 많았어서 기초문제는 논리적인 풀이법을 알겠다면 바로 답지를 살펴보는게 현명한 방법이었겠다는 것을 깨달았다. 그래서 문법공부를 병행하며 기초문제 풀이를 반복하고 기초가 탄탄해지면 오롯이 혼자힘으로 고급문제들에 도전해보고 싶다.
가장 많이 성장한 부분은 코드를 쪼개가면서 console.log()를 활용해 문제가 생긴 부분을 파악하고 그에 맞는 해결방법들을 찾아나간 것이다. 이론적인 부분들에 근거해서 고쳐보거나, 왜 써야하는지 이해 안가는 부분들은 지웠다가 테스트 돌려보고, 이것저것 바꿔써보고 테스트하는 식으로 실험을 하니 글로 이해가 안가는 문법이 이해가 되기도 하고 질문해볼만한 궁금증들도 더 생기는게 좋았다. 3-5주차 주특기 주간은 잠잘시간도 부족하대서 알고리즘 공부 흐름을 잠시 멈춰야하는게 아쉽지만 앞으로 문법과 알고리즘을 어떤식으로 공부할지에 대한 생각이 잡혔다. 얻어가는게 많은 주다.


어떤 문제를 맞닥뜨리고 극복했나?

알고리즘 문제들이 기초였기 때문에 질문할 내용도 비교적 명확하고 정보도 많아서 대부분은 새로운 방법들을 적용하면서 자잘한 에러들을 해결하는 부분들이었지만 가장 오래 고민해본 것들을 꼽자면 '문자열 다루기 기본'에서는 Number(), '이상한 문자 만들기'에서는 splice()의 return 값과 multiple map() method에 관한 것들이다.

  • Number(): isNumeric(s) 이라는 Boolean function을 만들어서 Number()의 실행이 불가능할 경우 s라는 문자열이 숫자열로 변환되지 못하게 문자를 포함하고 있다는 뜻이므로, 이 판별식으로 문자가 포함되어있는지를 확인했다. 그런데도 계속 테스트11에서 막혀 알아보니 Number()에서는 e를 지수로 간주하기 때문에 e가 들어가는 문자열을 false로 return 하라는 조건이 추가되어야 했었다.
function solution(s) {
const isNumeric = n => !!Number(n);
var answer = (s.includes('e')? false: isNumeric(s) == false? false: s.length !== 4 && 6? false: true);
    return answer;
    }
  • splice(): return allCap[0].split('').splice(0, 1, "r") 라는 코드는 splice 기능을 통해 배열의 값이 교체된 상태로 나오는게 아니라 잘려나간 알파벳이 '반환'되는데 splice는 반환(return)값이 잘려나간 element이기 때문이라는 것을 배웠다. 따라서 새로운 함수를 선언해준후에 그 함수를 splice 함수를 통해 배열을 '변환'시키고 변환된 A를 반환하면 된다.
    var A = allCap[0].split('');
    A.splice(1, 1, "r");
    return A;
  • multiple map(): mdn 사이트에서는 간단한 예제를 통해 이해해서 map이 어떻게 쓰이는지 알겠다고 생각했다. 하지만 복잡해진 이중 map()문을 보고 이해가 안가는 부분들이 생기기 시작했다. 하지만 각각의 절차를 쪼개서 어느 구간을 지날때 배열이 어떻게 바뀌는지 적어놓고, 아래의 n, m, idx 부분에 들어가는 파라미터들이 무엇을 가르키는 것인지 더 잘 이해할 수 있는 계기가 되었다.
function solution(s) {
"try hello world" -> "TRY HELLO WORLD"
const upperStr = s.toUpperCase();
const arr = upperStr.split(' ');

const changedArr = arr.map(n => {
const charArr = n.split('');
const changedChar = charArr.map((m, idx) => idx%2 !=0 ? m.toLowerCase() : m);
return changedChar.join('');
 });
return changedArr.join(' ');
}

짧은 생각

알고리즘 주간은 주특기 공부때 js로 쓰인 코드를 구글링하고 이해할 수 있도록 최소한의 기초를 공부해보는 주간이다. 기본기가 아직도 부족한데 주특기 공부로 넘어가는 것은 걸음마도 못뗀 아기에게 달려보라고 하는 것과 같아서 더 기본기를 공부하고 싶지만, 그래도 처한 상황에 어떻게든 결과를 내보고자 항해에 지원한거니까 한번 정했으면 그냥 할때까지 이 마음가짐을 고수하도록! 동거인이 코로나 걸려와서 저녁 먹고 나서는 컨디션이 말이 아니긴한데 핑계 없이 할 수 있는데까지 해보자. 아쉬움이 남지 않도록.

더 알아보기

profile
기록하며 앞으로 나아갑니다 :)

0개의 댓글

관련 채용 정보