2022 서강대학교 청정수컵 풀이
A   [BOJ 25175] 두~~부 두부 두부
B   [BOJ 25176] 청정수열 (Easy)
C   [BOJ 25177] 서강의 역사를 찾아서
D   [BOJ 25178] 두라무리 휴지
E   [BOJ 25179] 배스킨라빈스~N~귀엽고~깜찍하게~
F   [BOJ 25180] 썸 팰린드롬
G   [BOJ 25181] Swap the elements
H   [BOJ 25182] 청정수열 (Hard)
I   [BOJ 25183] 인생은 한 방
J   [BOJ 25184] 동가수열 구하기
K   [BOJ 25185] 카드 뽑기
L   [BOJ 25186] INFP 두람
M   [BOJ 25187] 고인물이 싫어요
N   [BOJ 25188] 1, 3, 모 나누기

1. 문제

$25175$. 두~~부 두부 두부 (2022 서강대학교 청정수컵 A번)

백준 25175번 - 두~~부 두부 두부 (https://www.acmicpc.net/problem/25175)

2. 풀이

$1$부터 $N$까지 원 모양으로 있고, $M$에 어떤 특정 수 $X$를 더했을 때의 번호는 다음과 같이 구할 수 있다.

int result;
if ((M + X) % N == 0) {
  result = N;
}
else if ((M + X) % N != 0) {
  result = (M + X) / N;
}

그리고, 이를 간단하게 하나의 식으로 정리할 수 있다.

result = ((M - 1) + X) % N + 1;

$3$모에서 시작해서 정수 $K$를 외치기 때문에, 위 식에서 $X$의 값은 $K-3$이 된다.

result = ((M - 1) + (K - 3)) % N + 1;

이때, $K-3$의 값이 총 사람 수 $N$을 초과한 값일 수 있으므로, $N$으로 나누어 값을 제한한다.

result = ((M - 1) + (K - 3) % N) % N + 1;

$K$가 음수가 가능하므로, (K - 3) % N의 범위는 다음과 같다.

$-(N - 1)\leq$ $(K - 3)\; \%\; N$ $\leq N - 1$

따라서, (M - 1) + (K - 3) % N이 음수 값을 갖지 못하도록, $N$을 더해준다.

result = ((M - 1) + (k - 3) % N + N) % N + 1;

이렇게 하면, 예외 케이스를 전부 커버하면서 정답을 도출해낼 수 있다.

이 외에도, 생각하는 순서에 따라 비슷하지만 다양한 형태의 한 줄 코드가 정답으로 가능하다.

3. 채점 결과

boj-25175

4. 회고

.

5. 코드

댓글남기기