티스토리 뷰
백준 온라인 저지(BOJ) 4307번 개미
https://www.acmicpc.net/problem/4307
4307번: 개미
개미 여러 마리가 길이가 lcm인 막대 위에 있다. 각 개미의 이동 속도는 모두 일정하며, 1cm/s이다. 개미가 막대의 마지막까지 걸어간다면, 개미는 그 즉시 떨어지게 된다. 또, 두 개미가 만나게 된
www.acmicpc.net
* 사용언어 : C언어, C++
1. 문제
길이가 L 인 막대 위에 N 마리 개미가 있음
개미 1초에 1칸씩 이동하고 막대 마지막에서 떨어짐
만나면 서로 방향을 반대로 바꾸어 이동함
모든 개미가 떨어질 때까지 가장 빠른 시간과 가장 느린 시간 출력
2. 풀이
개미의 충돌이 문제의 가장 어려운 부분인데
아이러니하게도 충돌은 아예 무시하고 풀어도 됩니다.
왜냐면 충돌 이후 서로 방향을 바꾸는 것과
충돌없이 교차해서 지나가는 것의 결과가 같기 때문입니다.
예를 들어 아래 그림 1) 과 같이 충돌하는 상황이 있을 때,
그림 2) 처럼 충돌이 없는 것처럼 처리해도 결과는 똑같습니다.
(각 개미를 구별하여 처리할 필요가 없기 때문)
충돌을 무시하면 풀이는 단순해집니다.
각 개미 별로 ① 왼쪽으로 떨어지는데 걸리는 시간(pos)과 ② 오른쪽으로 떨어지는데 걸리는 시간(L - pos) 중
큰 값이 가장 오래 걸리는 시간, 작은 값이 가장 적게 걸리는 시간이 됩니다.
위에서 구한 값을 전체 탐색하면서 전체의 min, max 와 비교한 뒤 더 큰 값을 저장하고 출력하면 됩니다.
3. 코드
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
int T, L, N;
int max(int a, int b) { return a > b ? a : b; }
int min(int a, int b) { return a < b ? a : b; }
int main() {
scanf("%d", &T);
for (int t = 0; t < T; ++t) {
scanf("%d %d", &L, &N);
int MIN = 0, MAX = 0;
for (register int i = 0; i < N; ++i) {
int pos;
scanf("%d", &pos);
int shortest = min(pos, L - pos);
int longest = max(pos, L - pos);
MIN = max(MIN, shortest);
MAX = max(MAX, longest);
}
printf("%d %d\n", MIN, MAX);
}
return 0;
}
'개발자 > 문제풀이 (C언어)' 카테고리의 다른 글
[백준/BOJ] 10807번 개수 세기 (C/C++) (0) | 2023.01.08 |
---|---|
[백준/BOJ] 1927번 최소 힙 (C/C++) (0) | 2023.01.08 |
[백준/BOJ] 25304번 영수증 (C/C++) (0) | 2022.11.26 |
[백준/BOJ] 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰 (C/C++) (0) | 2022.11.26 |
[백준/BOJ] 3678번 카탄의 개척자 (C/C++) (0) | 2022.11.23 |
- Total
- Today
- Yesterday
- 나의첫죽음학수업
- 영화감상평
- 관계가상처가되기전에
- 알고리즘
- 독서 감상평
- 정올
- 긴 자리 덧셈 뺄셈
- 문현공
- 시대예보
- 센터독서클럽
- AdSendse
- JUNGOL
- 여가포인트
- 삼성전자
- 쿠프마케팅
- 세상을 읽는 새로운 언어 빅데이터
- 긴 자리 곱셈
- 자료구조
- 안전운전특약
- 정세현의통찰
- 나는늘잘해야한다고생각한다
- 최재천의공부
- 자동차보험
- 인간본성불패의법칙
- 당신도느리게나이들수있습니다
- 동탄에듀센터2
- 유연함의힘
- 동탄에듀센터
- 독서감상평
- 호암의마지막꿈
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |