Post

코딩테스트 (0)

코딩테스트에 대해서 알아보자

서론

우리가 취업을 위해서 준비해야할 것에는 여러가지가 있다.
그 중 코딩테스트는 필수적으로 준비해야하는 요소다.
오늘은 이 코딩테스트가 어떤 것인지 알아보고 간단하게 문제를 풀어보는 시간을 가져보자.

코딩테스트?

코딩테스트란 말 그대로 코딩을 통해 테스트를 진행하는 개발자 입사 프로세스의 일부이다.
특정 상황이 주어지면 그 상황을 해결하는 방법과 과정, 그리고 결과를 본다.

어디서 할 수 있을까?

일단 테스트 자체는 회사마다 다르다.
하지만 기출문제나 연습을 할 수 있는 사이트를 알려주겠다.

  1. 프로그래머스
    • https://school.programmers.co.kr/learn/challenges
  2. 백준
    • https://www.acmicpc.net/
  3. 삼성SW 익스퍼트 아카데미
    • https://swexpertacademy.com/main/main.do
  4. 정올
    • http://jungol.co.kr/

필자는 프로그래머스를 많이 이용하며 가끔 백준도 한번씩 들어가본다.
여러가지 사이트를 본 뒤 본인에게 맞는 사이트를 이용하면 될 것 같다.

맛보기

맛보기로 코딩테스트 중 가장 간단한 문제를 보도록 하자.
오늘 이 게시글에서 쓰일 테스트는 프로그래머스(https://school.programmers.co.kr/learn/challenges)에 있는 문제이다.

문제설명

어떤 자연수를 제곱했을 때 나오는 정수를 제곱수라고 합니다.
정수 n이 매개변수로 주어질 때, n이 제곱수라면 1을 아니라면 2를 return하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ n ≤ 1,000,000

해결과정

  1. 주어진 n이 제곱수인지 아닌지를 판단하는 방법
    • 1부터 n까지 반복문을 굴린다. 이때 반복문에 쓰인 변수를 i라고한다.
    • i를 제곱했을때 n과 일치하는지 판단하고 일치한다면 1을 return 하고, 일치하는 것이 없을때는 2를 return 한다.
1
2
3
4
5
6
7
function solution(n) {
    for(let i = 1; i <= n; i++){
      if(i*i===n) return 1;
    }

    return 2;
}

위와 같이 해결할 수 있다.
하지만 저게 정답일까? 그것에 대답은 정답일 수도 아닐 수도 있다.
해결방법이 저것이 다가 아니기 때문이다.
그럼 위의 문제에 다른 답에 대해서 알아보자.

  1. Math.sqrt(n) 함수를 이용해 판단하는 방법
    • Math.sqrt(n) 은 실수 n에 대하여 제곱근을 반환하는 함수이다.
    • 반환된 제곱근이 정수라면 n은 제곱수, 아니면 제곱수가 아니다.
1
2
3
function solution(n) {
    return Number.isInteger(Math.sqrt(n)) ? 1 : 2;
}

두번째 해결법을 이용해 코드를 작성해보았다.
어떤가 첫번째 해결법보다 더 깔끔해보이는가?
그렇다면 아래가 정답인가에 대한 대답은 아까와 같다.
무엇이 더 좋은코드인지는 상황에 따라 다르기 때문이다.

우선 첫번째 코드는 1부터 n까지 반복을 해야하기때문에 쓸데없는 시간이 소요될 수 있다는 단점이 있다.
하지만 n이 매우 낮은 수라면 처리속도가 매우 빠를 것이다.

sqrt는 n이 높은 수일때 유리하다.
sqrt는 n에 루트를 씌우는 연산을 해주는 함수이다.
그렇기때문에 처리속도에 큰차이는 없지만 매우 낮은 수 일때도 똑같은 연산을 해야하기때문에 그런 부분에서는 분리할 수 있다.

우선 이 문제에서는 아래 코드가 조금 더 정답에 가깝다고 볼 수 있다.
평균적인 처리속도가 아래쪽이 훨씬 빠르고 코드의 가독성또한 아래가 더 좋기때문이다.

마치며

오늘은 간단하게 코딩테스트에 대해서 알아보고, 맛보기로 문제를 풀어보았다.
오늘 풀어본 문제는 가장 쉬운 난이도의 문제이고 수많은 문제가 있으니 취업을 위해서 하루에 할당량을 정해놓고 풀어보는 것이 좋다.

그리고 다음 게시글부터는 코딩테스트 문제를 풀어보고 그 문제에 대한 풀이를 올려보도록 하겠다.

This post is licensed under CC BY 4.0 by the author.