본문 바로가기
알고리즘/Programmers

[TIL] 2023.03.22 Programmers 문제 풀기, 인텔리픽 모의면접 후기

by heereal 2023. 3. 22.

Today I Learned

  • Programmers 문제 풀기
  • 저녁 9시 인텔리픽 모의면접 

 


Programmers 문제 풀기

콜라츠 추측

나의 풀이

function solution(num) {
    let result = num;
    for ( i = 0; i <= 500; i++) {
        if (num === 1) return 0;
        if (result === 1) return i;
        if (result % 2 === 1) { 
            result = 3 * result + 1;
        } else if (result % 2 === 0) {
            result = result / 2;
        }
        if (i === 500) return -1;
    }
}

우와 거의 일주일 만에 풀었다. if문이 많은 지저분한 코드긴 하지만 감동스러움..

 

원래 문제를 통과하지 못했던 이유가 result가 1이 나오더라도 다음 if문으로 바로 넘어가서 result를 재할당하기 때문에 if (result === 1)인 경우를 잡아내지 못하는 거였는데 짝수/홀수 경우를 else if문으로 수정해서 해결했다. 

 

다른 사람의 풀이 01

function collatz(num) {

  for(var answer = 0; answer<500; answer++){
    if(num%2==0){
      num = num/2;
    } else if(num==1){
        return answer;
    } else if(num%2==1){
      num = (num*3)+1;
    }
  }
    return -1;
}

이렇게 처리하면 num이 1인 경우는 어떻게 처리하고, 500번까지 반복했을 때도 1이 되지 않았을 때 어떻게 조건을 주지 않고 return문 만으로 처리할 수 있는 걸까?😵

 

 

다른 사람의 풀이 02

function solution(num) {
    var count = 0;

    while (count < 500) {
        if (num === 1) {
            return count;
        }
        count ++;
        num = num % 2 === 0 ? num /2 : num *3 +1;
    }

    return -1;
}

count가 500 미만일 때만 중괄호 안의 statement를 실행한다. 만약 count < 500이라는 조건이 거짓이 된다면, 즉 500을 넘어선다면 while문을 지나 return -1을 하게 된다. while문은 거의 사용해보지 않아서 익숙하지 않기 때문에 언제 한번 while문을 이용해서 알고리즘을 풀어보는 연습을 해야겠다.

 

    • while문조건문이 참일 때 실행되는 반복문이다. 조건은 문장안이 실행되기 전에 참, 거짓을 판단한다.
    • condition: 반복이 시작되기 전에 조건문은 참, 거짓을 판단받게 된다. 만약 조건문이 참이라면, while문 안의 문장들이 실행된다. 거짓이라면, 문장은 그냥 while 반복문 후로 넘어간다.
    • statement: 조건문이 참일 때만 while문 속의 문장들이 실행된다. 반복문 속에 여러 개의 문장을 사용하고 싶다면 중괄호 { }를 통해 문장들을 하나로 묶어야 한다.
while (condition)
  statement

 


인텔리픽 모의면접 후기

내일배움캠프 수료생들에게 취업 지원을 위해 인텔리픽으로 이력서, 면접 피드백을 제공하는데 오늘 오후 9시에 인텔리픽 면접 코칭을 위한 모의면접을 봤다. 시간 맞춰서 게더타운에서 문자를 통해 미리 전달받은 룸으로 들어가서 면접을 진행하면 된다. 

 

면접 질문 리스트

  1. 왜 개발자라는 직업을 선택하셨나요?
  2. 삶에서 중요하게 생각하는 가치는 무엇인가요?
  3. 최근에 인상 깊게 읽은 아티클이나 블로그 글이 있나요?
  4. 스택과 큐의 차이점을 설명해 주세요.
  5. 배열과 링크드어레이를 설명해 주세요. +) 배열의 경우 왜 테이터의 삽입 삭제가 느릴까요?
  6. CORS가 무엇인지 설명해 주세요. +) 다른 출처의 리소스를 허용하지 않는 이유는 무엇일까요?
  7. CSR과 SSR의 차이점을 설명해 주세요.
  8. 동기와 비동기의 차이점을 설명해 주세요.
  9. 왜 우리는 jquery나 jsp를 사용하지 않고 react를 사용하는 걸까요?
  10. React에서 가장 중요한 부분이 뭘까요? -> 상태 관리!
  11. [👇🏻이력서 관련 질문]
  12. 왜 React Query와 Recoil 조합을 사용하셨나요?
  13. 서버 상태와 클라이언트 상태는 어떤 식으로 구분해서 사용하셨나요?
  14. EXPO가 뭔가요? +) EXPO는 라이브러리일까요, 프레임워크일까요?
  15. useFocusEffect가 뭔가요? +) React Native의 Stack 구조에 대한 추가 질문

 

내 경우에는 기술 질문은 전부 목터뷰에서 공부했던 내용 나왔는데 동기들 얘기 들어보면 이건 면접관에 따라 너무 다른 거 같다. 나는 기술 질문과 이력서 관련 질문을 절반의 비율로 해주셨고, 이력서에서도 프로젝트 설명이나 기능 구현을 어떻게 했냐 보다는 트러블슈팅 위주의 질문을 받았다.

 

생각보다 긴장 안 하고 면접 봤고 걱정했던 것보다 대답 잘한 거 같다. 물론 횡설수설하고 명확하게 답변하진 못했지만 그래도 내가 알고 있는 내용을 최대한 전달하기 위해 노력했다. 중간중간 내 답변에서 부족한 부분이나 틀린 부분이 있으면 튜터님이 추가적으로 설명을 해주시기도 했고 DOM Depth 관련해서 React의 기초적인 부분을 잘 파악하고 있으면 나중에 면접에서 답변할 때 도움이 많이 될 거라는 조언도 해주셨다.

 

짧지만 면접이나 이력서 관련해서 궁금한 점도 여쭤보고 피드백을 받을 수 있었고 면접에 통과해서 추천서를 작성해 주시겠다는 말씀까지 들었다! 질문에 대한 답이 명확하지 않더라도 모든 질문에 답변하고, 최대한 설명하려 노력한 점을 좋게 봐주신 거 같다. 오늘 면접 보면서 스스로 고쳐야 할 점을 몇 가지 발견하기도 했다. 이제 피드백 내용에 따라 이력서를 수정하고 면접도 다시 준비해 봐야겠다.


회고

프로그래머스 1단계 1페이지 다 풀었다! 근데 2페이지부터 급격히 어려워지는 거 같음🥹

 

 

댓글