728x90
SMALL
백준 문제 풀이: 32369 [지옥에서 온 민수]
문제 링크: https://www.acmicpc.net/problem/32369
문제 설명:
지옥에서 온 민수가 하루에 a
번 오르고, 지구인은 하루에 b
번 내리는 상황이 n
일 동안 반복됩니다. 두 사람은 처음에 각각 1층에서 시작하며, 같은 층에 올라서면 지구인은 위층으로 피신하여 한 층 내려갑니다.
조건:
- 민수와 지구인은 각각 1층에서 시작한다.
- 매일 민수는
a
층, 지구인은b
층 이동한다. - 민수가 도달한 층이 지구인보다 낮거나 같을 경우 서로 만난 것이므로, 지구인은 1층 더 도망간다.
n일이 지난 후 민수와 지구인이 각각 몇 층에 있는지를 출력하는 문제입니다.
문제 해결 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int n, a, b;
scanf("%d %d %d", &n, &a, &b); // n일, 민수의 상승량 a, 지구인의 상승량 b
int oh = 1; // 민수의 초기 층
int od = 1; // 지구인의 초기 층
while (n--) {
oh += a; // 민수 상승
od += b; // 지구인 상승
// 민수가 지구인을 따라잡거나 추월했을 경우
if (oh < od) {
int temp = oh;
oh = od;
od = temp;
}
else if (oh == od) {
od -= 1; // 같은 층에 도달하면 지구인은 한 층 도망감
}
}
printf("%d %d\n", oh, od); // 민수와 지구인의 위치 출력
return 0;
}
예제 입력:
3 3 2
예제 출력:
10 8
코드 설명
- 핵심 아이디어: 반복문을 통해 민수와 지구인의 층 수를 매일 업데이트하고, 같은 층일 경우 지구인이 한 층 내려가는 조건 처리
- 구현 세부사항:
oh
는 민수의 현재 층수,od
는 지구인의 현재 층수- 민수와 지구인이 같은 층이 되면
od -= 1
- 지구인이 민수보다 높을 수 없도록,
oh
와od
를 swap
- 시간 복잡도: O(n), 하루씩 시뮬레이션 진행
결과
단순한 시뮬레이션 문제로, 조건 분기와 상태 업데이트가 핵심입니다. 층간 추격전 컨셉을 통해 조건 판단 능력을 키우기 좋습니다.
다른 방식의 구현이나 추가적인 조건이 있다면 댓글로 공유해주세요!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 20006번 [랭킹전 대기열](C++) -yes6686- 티스토리 (0) | 2025.02.23 |
---|---|
백준 3758번 [KCPC](C++) -yes6686- 티스토리 (1) | 2025.02.15 |
백준 13335번 [트럭](C++) -yes6686- 티스토리 (0) | 2025.02.12 |
백준 1515번 [수 이어 쓰기](C++) -yes6686- 티스토리 (0) | 2025.02.09 |
백준 1913번 [달팽이](C++) -yes6686- 티스토리 (0) | 2025.02.06 |