월간 코드 챌린지 시즌 3 : https://programmers.co.kr/competitions/1581?slug=monthly-code-challenge-s3
JetBrains x 프로그래머스 월간 코드 챌린지 시즌3
접수 21년 08월 23일 11:00 ~ 10월 07일 18:00 테스트 21년 09월 09일 19:30 ~ 10월 07일 22:30
programmers.co.kr
문제와 해설은 2021.10.18(월)에 공개된다고 한다.
월간 코드챌린지에서 4 문제 이상 풀었어도 응모하기 버튼을 안누르면 응모가 안되는 거 같다.
응모 링크 : https://programmers.co.kr/events/monthly-code-challenge-s3



운 좋게 15명 뽑는 JetBrains 기념품 세트에 당첨되었다~
처음으로 알고리즘 대회할 때 입을 수 있는 옷이 생겨 뿌듯하다.
아래는 문제를 풀며 생각한 것들이다.
1번 문제
주어진 수를 어떠한 값으로 나눠서 나머지가 1이 되는 수를 구하는 문제였는데
이때 주어진 수의 범위가 100만으로 매우 작은 값이었기 때문에
2 부터 주어진 수까지 나눠보면서 나머지가 1이 되는 경우 해당 값을 리턴하도록 하면 되었다.
시간복잡도 : O(n)
2번 문제
n 값이 주어졌을때 n * n 칸의 테이블을 만들고
n 부터 1까지 순회하며 i번째일경우 (0, 0) 에서 (i-1, i-1) 까지 모두 i로 채운 후에
테이블을 행방향으로 모두 자르고 열방향으로 붙인 후의 배열을 출력하는 문제였다.
이때 좌표가 (y, x)일 경우 해당 좌표의 값은 Math.Max(y, x) + 1 이되게 된다.


이때 0부터 n*n-1까지 순회하며
y 좌표 = i/n, x 좌표 = i%n 으로 구할 수 있고
위 공식에 따라 Math.max(y, x) + 1에 넣어주면 쉽게 풀 수 있다.
시간복잡도 : O(n^2)
3번 문제
a와 b가 주어졌을때 a행 b열의 테이블을 만들고 각 칸에 공을 넣고
주어진 조건에 따라 이동 후에 y행 x열에 남게 되는 공의 개수를 출력하는 문제였다.

행과 열을 분리하여 생각하면 마지막에 y행 x열에 남게 되는 공의 수는
y행으로 가는 공의 수 * x열으로 가는 공의 수 가 되게된다.
x열의 경우 살펴보면
xcnt(xmin에 있는 구슬의 개수) = 1
xmin = 0, xmax = b-1로 초기화한다.

그러면 왼쪽과 오른쪽 두가지의 경우 밖에 없게 되는데
왼쪽으로 k칸 이동일 경우
xmin-k 가 음수일 경우 xcnt에 k-xmin을 더해준다.
xmin = Math.max(0,xmin-k);
xmax = Math.max(0,xmax-k);
오른쪽으로 k칸 이동일 경우
왼쪽과 다르게 오른쪽은 계산을 해주지 않는다(길이를 통해 개수를 알아낼 수 있으므로)
[길이 = xmax - xmin + 1]
xmin = Math.min(b-1,xmin+k);
xmax = Math.min(b-1,xmax+k);
xcnt의 값이 b보다 클경우 b로 수정해준다.
해당 쿼리가 끝날경우 x열에 남게 되는 구슬의 수는
x<xmin, x>xmax 일 경우 : 0 개
x==xmin이면서 x==xmax 일 경우 : b개
x==xmin이면서 x!=xmax 일 경우 : xcnt 개
x==xmax일경우 b - (xmax - xmin - 1) - xcnt
xmin<x, x<xmax 일 경우 : 1 개
y행의 경우도 x열에서 구한방법과 동일하게 계산하여 구한 값을 서로 곱하여 출력한다.
시간복잡도 : O(n)
4번 문제
쿼리의를 날릴 수 있는 개수 q 가 주어지고 원하는 배열이 주어지며
처음에 0으로 가득찬 배열 A을 q(l,r,x)의 꼴로 쿼리를 날려
배열을 원하는 배열로 바꿀 수 있는 경우의 수를 구하는 문제였다.
이때 쿼리는 l 부터 r까지의 수를 Math.Max(A[i],x)로 바꿔주는 쿼리였다.
해당 문제를 풀면서 q와 A의 크기가 50정도로 작으므로 배열로 만들어 dp를 생각하였으나
아이디어가 떠오르지 않아 완탐으로 구현해본 결과 TLE를 맞았다.
결과

이번에는 꼭 첫페이지에 들어가보려고 하였으나 3번 문제에서 시간을 많이 사용해
아쉽게 첫페이지에는 들지 못하였지만 유지 할 수 있음에 감사한다.
첫페이지에 들려면 난이도가 높은 문제들을 빠르게 해결 하는 능력을 길러야 할 것 같다.
'후기' 카테고리의 다른 글
| [Codeforces] Round 855 Div.3 후기 (0) | 2023.03.03 |
|---|---|
| [데브매칭] 2021 Dev-Matching: 웹 백엔드 개발자(하반기) 후기 (0) | 2021.10.19 |
| [카카오] 2022 신입 개발자 블라인드 채용 1차 코딩테스트 후기 (0) | 2021.09.18 |
| [LINE] 2021년 하반기 라인플러스 코딩테스트 후기 (0) | 2021.09.17 |
| JetBrains x 프로그래머스 월간 코드 챌린지 시즌3 후기 (0) | 2021.09.11 |