-
'2021 Dev-Matching: 웹 백엔드 개발자(상반기)' 기출 문제 해설취업 이야기/데브매칭 문제 해설 2021. 4. 26. 14:10
'Dev-Matching 웹 백엔드 개발자'의 코딩 테스트는 어떠셨나요? 3개의 프로그래밍 문제와 1개의 SQL 문제가 출제되었는데요. 출제된 4개의 문제 중 어떤 문제가 가장 어려우셨나요? 프로그래머스에서 공개하는 해설을 보고 스스로 보완해야 할 부분이 어디인지 확인해보세요. 만약 내가 Dev-Matching 웹 백엔드에 참여하지 않았다면, 문제를 한번 풀어보고 해설을 확인하시는 걸 추천드립니다.
문제를 다시 풀어보려면?
프로그래머스 사이트 내에 '코딩테스트 연습' > '모든 문제'의 왼쪽 하단 칼럼 > '문제 모음' > 2021 Dev-Matching: 웹 백엔드 개발자(상반기)를 클릭하면 출제된 코딩 테스트를 풀어 보실 수 있습니다. 뿐만 아니라 '문제 모음'에서 이전에 출제된 문제들도 풀어 보실 수 있으니 확인해보세요!
>> 코딩 테스트 연습 바로가기 <<그럼 문제 해설 시작하겠습니다.
프로그래밍 문제 1 - 로또의 최고 순위와 최저 순위
lottos의 원소 중에, win_nums에 포함된 원소의 개수를 equal_count, 0의 개수를 zero_count라고 합니다.
지워진 번호가 모두 당첨 번호가 아니라면, 일치하는 숫자의 개수는 equal_count개,
지워진 번호가 모두 당첨 번호라면, 일치하는 숫자의 개수는 equal_count+zero_count개 입니다.
프로그래밍 문제 2 - 행렬 테두리 회전하기
행렬의 테두리를 이루는 모든 숫자들을 한 칸씩 시계 방향으로 이동시키는 전형적인 구현 문제입니다.
이때, 8가지 부분으로 나누어 처리하면 간단히 구현할 수 있습니다.
- 왼쪽 위 모서리 숫자 : 오른쪽으로 이동
- 왼쪽 아래 모서리 숫자 : 위로 이동
- 오른쪽 위 모서리 숫자 : 아래로 이동
- 오른쪽 아래 모서리 숫자 : 왼쪽으로 이동
- 모서리를 제외한 왼쪽 테두리 숫자들 : 위로 이동
- 모서리를 제외한 오른쪽 테두리 숫자들 : 아래로 이동
- 모서리를 제외한 위 테두리 숫자들 : 오른쪽으로 이동
- 모서리를 제외한 아래 테두리 숫자들 : 왼쪽으로 이동
프로그래밍 문제 3 - 다단계 칫솔 판매
이 문제는 다음 과정을 통해 해결할 수 있습니다.
- center를 루트(root) 노드로 하는 트리를 구성합니다.
- 최초 이익이 발생한 노드의 부모 노드를 순차적으로 방문하면서 적절히 이익을 배분합니다.
먼저 트리를 구성하기 위해 연관 배열을 사용할 수 있습니다. 연관 배열이란 키 하나와 값 하나를 연관시켜 키를 통해 연관된 값을 얻을 수 있도록 하는 자료구조로, 언어에 따라 맵(map), 사전(dicitionary)라고 부르기도 합니다.
예를 들어 위와 같은 트리의 경우 각 노드의 부모 노드를 다음과 같이 표현합니다(center는
-
로 표시하였습니다).현재 노드 부모 노드 john - mary - edward mary emily mary jaimie mary sam edward young edward tod jaimie 이제 최초로 이익이 발생한 노드가 주어질 때, 부모 노드를 순서대로 거슬러 올라가며 이익을 배분할 수 있습니다.
예를 들어 young이 1200원을 번 경우
- young의 부모 노드는 edward입니다. young에게 1080원을 배분하고 현재 노드를 edward로 변경해 줍니다. 남은 금액은 120원입니다.
- edward의 부모 노드는 mary입니다. edward에게 108원을 배분하고 현재 노드를 mary로 변경해 줍니다. 남은 금액은 12원입니다.
- mary의 부모 노드는
-
(center)입니다. mary에게 11원을 배분하고 현재 노드를-
로 변경해 줍니다. 남은 금액은 1원입니다. -
는 root노드이므로 더 이상 부모 노드를 탐색하지 않습니다.
따라서 위와 같이 각 노드에 대해 부모 노드를 탐색하는 과정을 수행하며 이익을 배분하면 문제를 해결할 수 있습니다.
SQL 문제 - 헤비 유저가 소유한 장소
공간을 2개 이상 등록한 유저를 찾기 위해서는 다음과 같은 서브 쿼리를 사용해야 합니다.
SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(*) >= 2
이 쿼리를 짜는 게 이 문제의 첫 번째 목표였고 이 쿼리를 짰다면 아래와 같은 다양한 방법으로 답을 맞힐 수 있습니다!
첫 번째 풀이
WHERE 문에서 서브 쿼리를 이용한 풀이입니다. 서브 쿼리는
HOST_ID
가 2개 이상인HOST_ID
를 나타내 줍니다. 그다음 IN 연산자를 통해 서브 쿼리에 속하는HOST_ID
만 나타냅니다. 이 풀이는 가장 많은 사람들이 작성한 풀이입니다.SELECT * FROM PLACES WHERE HOST_ID IN ( SELECT HOST_ID FROM PLACES GROUP BY HOST_ID HAVING COUNT(*) >= 2 ) ORDER BY ID;
두 번째 풀이
기존
PLACES
테이블에HOST_ID
가 몇 번 나왔는지를 나타내는 열을 조인한 다음HOST_ID
가 2번 이상 나온 기존 테이블의 정보만 나타냅니다.SELECT A.* FROM PLACES A, (SELECT HOST_ID, COUNT(*) AS CNT FROM PLACES GROUP BY HOST_ID HAVING COUNT(*) >= 2) B WHERE A.HOST_ID = B.HOST_ID ORDER BY A.ID
세 번째 풀이
두 번째 풀이에서 WHERE 대신 JOIN을 사용한 쿼리입니다.
SELECT A.* FROM PLACES A LEFT JOIN ( SELECT count(HOST_ID) as c, HOST_ID FROM PLACES GROUP BY HOST_ID ) B ON A.HOST_ID = B.HOST_ID WHERE B.c >= 2 ORDER BY A.ID
맺으며
코딩 테스트에서 좋은 결과를 얻기 위해 출제자의 의도를 파악해보는 연습을 해보세요. 해설을 보고 어떤 문제가 나왔는지 복기해본 후 어렵게 느껴졌던 문제와 비슷한 유형의 문제를 많이 풀어보시길 추천해 드립니다. 프로그래머스 '문제 모음'에 카카오 기출 문제 등 다양한 기출 문제를 풀어볼 것을 권합니다.
Dev-Mathing은 개발자들과 유수의 기업을 이어주는 프로그래머스의 채용 프로그램입니다. 지원자는 하나의 이력서로 최대 5개의 관심 있는 포지션을 선택하여 지원할 수 있으며, 이력서와 테스트 점수가 함께 기업에 전달되어 지원자를 더욱 주목받게 도와주는 프로그램입니다.
자세한 내용이 궁금하시다면 지난 2021 Dev-Matching 웹 백엔드(상반기) 내용을 한번 확인해보세요!
>> 지난 2021 Dev-Matching 웹 백엔드(상반기) 내용 보러 가기 <<'취업 이야기 > 데브매칭 문제 해설' 카테고리의 다른 글
2021 ML Dev-Matching | 미술 작품 분류하기 : 출제자가 추천한 우수 코드 B (0) 2021.07.06 2021 ML Dev-Matching | 미술 작품 분류하기 : 출제자가 추천한 우수 코드 A (0) 2021.07.06 '2021 Dev-Matching: 웹 프론트엔드 개발자(상반기)' 기출 문제 해설 (10) 2021.04.15 [2019 윈터코딩] 가장 어려웠던 코딩테스트 3번 문제 해설 (4) 2019.11.11 스타트업 개발자 커리어 시작하기_Winter Coding(윈터코딩)&SummerCoding(썸머코딩) (0) 2019.10.15