[데브매칭] 2021 Dev-Matching: 웹 백엔드 개발자(하반기) 후기
2021 Dev-Matching: 웹 백엔드 개발자(하반기) 코딩 테스트
코딩 테스트는 총 120 분간 진행되었으며 4문제(SQL 1문제 포함)로 구성되어 있었다.
전체적인 문제의 난이도는 높지 않고 기본적인 구현을 할 수 있는지
역량을 확인하는 것 같고 기본적으로 문제의 n 값이 작기 때문에
다양한 방법으로 주어진 문제를 풀 수 있었을 것 같다.
SQL의 경우 항상 공부를 하고 난 뒤 실제로 사용할 일 이 없기에
금방 다시 까먹게 되는 것 같아 이러한 점은 보완해야겠다고 생각을 먹은 테스트였다.
1번 문제
새로운 문자열이 기존에 있던 문자열 목록에 포함되면 새로운 문자열을 반환하고
기존에 없는 문자열이라면 해당 문자를 반환하는 문제였다.
우선 기존 문자열을 HashSet<String> 을 이용하여 모두 넣어준 후에
해당 셋에 새로 원하는 문자열이 들어있다면
새로운 문자열을 정규표현식을 이용하여 문자부와 숫자부로 나눈다.
문자부 : str.replaceAll("[^0-9]","")
숫자부 : str.replaceAll("[^a-z]","")
문자와 숫자로 나눠진 문자열은 주어진 규칙에 의해 새로운 문자열을 만들고
위 과정을 반복하여 HashSet에 포함되어 있지 않다면 해당 문자열을 반환한다.
2번 문제
문제에 대한 직접적인 언급은 하면 안 될 거 같아 비슷하게 만들어 보면
제한된 길이의 일자로 된 공간이 동일한 길이로 나누어져 있고
몇몇 공간에는 통로가 있으며 양옆의 통로끼리는 연결될 수 있다.
이때 주어진 횟수만큼 통로를 추가 설치하여 가장 긴 통로를 만들라는 식의 문제였다.
누적합을 이용해 왼쪽 끝부터 해당 위치까지의 통로가 없는 개수를 계산해주고
투포인터를 이용하여 처음 투포인터의 간격을 한 칸으로 시작하여
주어진 구간에 추가적으로 설치해야 될 경우 왼쪽 포인터와 오른쪽 포인터를 오른쪽으로 한 칸
주어진 구간에 추가적으로 설치하지 않아도 될 경우 오른쪽 포인터를 오른쪽으로 움직이며
오른쪽 포인터와 왼쪽 포인터의 위치 차이를 이용하여 최대길이를 계산해준다.
이때 주어진 n 값이 매우 작았으므로 누적합을 이용하지 않고 투포인터 만으로도 가능하다.
3번 문제
기본적인 BFS 문제에 구현이 추가된 문제였다.
해당 문제 특성상 여러 번의 변동이 있을 수 있으며
이 경우에는 while문을 통해 변동이 없을 때까지 진행해주면 된다.
BFS를 도는 과정 중에 중복된 곳을 처리하여 경우의 수를 줄일 수 있는데
n 값이 매우 작기 때문에 완전 탐색하여도 문제가 없을 것 같다.
처음에는 단순한 문제라고 생각하여 제출하였는데
계속 틀려 BFS를 잘 못 돌렸나 생각하며 코드를 이것저것 수정하며 시간을 많이 소모했는데
BFS 이후에 처리해주어야 하는 과정이 틀린 것을 마지막에 알게 되고 수정하여 맞췄다.
너무 당연히 맞다는 생각에 단순 구현이 틀릴 수 있다 라는 생각을 못했던 거 같다.
참고할만한 문제
https://www.acmicpc.net/problem/11559
11559번: Puyo Puyo
총 12개의 줄에 필드의 정보가 주어지며, 각 줄에는 6개의 문자가 있다. 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다.
www.acmicpc.net
https://www.acmicpc.net/problem/2933
2933번: 미네랄
창영과 상근은 한 동굴을 놓고 소유권을 주장하고 있다. 두 사람은 막대기를 서로에게 던지는 방법을 이용해 누구의 소유인지를 결정하기로 했다. 싸움은 동굴에서 벌어진다. 동굴에는 미네랄
www.acmicpc.net
4번 문제
A그룹 중 B그룹 특정 단어가 포함되지 않는 행을 골라서 출력하는 문제였다.
간단히 NOT IN 혹은 LEFT JOIN 등으로 해결할 수 있다.
3번 문제의 오류를 해결하고 나니 시간이 얼마 남지 않아 풀지 못하고 제출하였다.
결과