알고리즘 코딩

코딩테스트 풀이 [항해99 자바스크립트 1주차 숙제]

가문비7 2023. 4. 7. 22:22

코딩테스트를 풀어봤다. 문제는 아래 링크에 있다.

https://school.programmers.co.kr/learn/courses/30/lessons/12916

 

내가 느낀 점은 매우 어렵다는 것이다. 이 문제의 답이나 실마리가 머릿속에서 나올 이유가 없어 보였기 때문에 답안을 살짝 봐서 머릿속에 반쯤만 남아있는 상태로 코드를 작성해 보았다. 나름의 학습방법이다. 그렇게 해서 맞는 답안을 제출할 수 있었다.

 

다음에 더 잘하게 될 방향을 찾기 위해서, 왜 내가 풀기위해 답안을 보아야만 했는지를 생각해 보았다. 

두가지 이유였다. 

  첫째, 한마디로 '개념이 머릿속에 없어서' 

  둘째, 오랜 시간을 들여 고민하지 않고 효율을 위해 바로 답안을 보기로 선택해서. 이건 앞으로 시간을 들여 문제를 풀어 보면 해결될 것이다.

 

따라서 첫째 이유에 대해서만 생각해 보자. 도대체 내 머릿속에 무슨 개념이 없었을까?

1) 일단 구체적으로는 어떤 문자가 문자열 안에서 몇 번째에 있는지를 자바스크립트로 표현할 수 있다는 사실을 몰랐다.

 
  let s = "abcdefg"
  console.log(s[1])

이렇게 하면 콘솔창에는 b가 뜬다. 나는 이걸 까맣게 몰랐다. 이 문제를 푸는 데 필요한 핵심적인 개념이다.

 

2) 그리고 toUpperCase() 가 전혀 떠오르지 않았다. 이걸 써야 풀 수 있는 문제였다. 아래 코드가 필요했다.

  s = s.toUpperCase()
 

 

3) 첫번째 문자부터 마지막 문자까지 돌면서 P인지 Y인지 확인한 후 그에 따라 P면 a에다가 +1을 , Y면 -1을 한 후 

 마지막에 a값이 0인지 아닌지 확인한다는 개념이 없었다. 

이런 개념이 생기려면 문제를 많이 풀어보는 수밖에 없다고 생각한다. 문제를 풀면서 이런 방식의 사고를 많이 접하고 그 사고의 조각들이 머릿속에 남아 있으면 그 다음에 비슷한 문제를 봤을 때 그 조각들이 합쳐지면서 풀 수 있을 것이다.

 

내가 결과적으로 작성한 답안은 아래이다. 

function solution(s) {
  let answer = true;
  s = s.toUpperCase()
  console.log(s[0])

  let a = 0
  for(i = 0; i < s.length; i++){
    if(s[i] === 'P') {a = a + 1}
  }
  for(i = 0; i <s.length; i++){
    if(s[i] === 'Y') {a = a - 1}
  }

  answer = Boolean(a === 0);
  return answer;
}

console.log(solution('ppyyyyyfff'))

 

결론은, 코딩테스트에 시간을 때려 넣는 것만이 답인거 같다. 시간.. 시간.. ^^ㅎㅎ