Priceless

[백준] 4307번: 개미 (C++) 본문

Algorithm & Test/백준

[백준] 4307번: 개미 (C++)

Hyun__ 2023. 9. 1. 17:16

개미끼리 만나면 방향을 바꾼다고?

처음에는 개미 마다의 위치를 저장하는 배열과

개미의 방향을 저장하는 배열을 사용하여

각 조건마다 시뮬레이션을 돌리는 방식으로 진행하려고 했다

시간이 많이 소요될 것이고 무엇보다 구현하는 데에도 시간이 많이 걸릴 것 같았다

 

그래서 찾아보던 중 같은 속도로 이동한 개미가 만나면

서로 반대 방향으로 돌아보니 결국 같은 개미들이 서로 스쳐지나가는 것과

시간이 똑같이 않겠나!

무슨 뜻인지 이해가 잘 가지 않을 수 있다

아래 사이트의 그림과 함께 본다면 더욱 이해가 잘 될 것이다

[백준 4307번] 개미 풀이 (tistory.com)

 

[백준 4307번] 개미 풀이

4307번: 개미 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 막대의 길이와 개미의 수 n이 주어진다. 다음 n개 줄에는 숫자가 하나씩 주어지며, 이 숫자는 개미의

maramarathon.tistory.com

그러니 이 문제는 모든 개미들이 만나면 방향 바뀌는 것 없이

가장 먼저 떨어지고 늦게 떨어지는 개미가 언제 떨어지는지만 구하면 되는 문제이다

구현은 쉬우나 문제를 이해하고 코드를 간소화하여 구현하는 것이 어려웠던 문제다

 

출력 과정에서도 계속 오류가 뜬다고 해서 

질문 게시판을 보니 예전부터 구체적 조건이 부족한 문제로 피드백 받아온 것 같다

// baekjoon 4307

#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>


using namespace std;

// codes for fast I/O
void init(){
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(false);
}


int main(){
    init();
    
    int n;
    cin >> n;
    
    int l, ant;
    
    
    for(int i = 0; i < n; i++){
        cin >> l >> ant;
        
        int min_count = 0;
        int max_count= 0;
        
        //int loc[ant];
        for(int j = 0; j < ant; j++){
            int loc;
            cin >> loc;
            int short_count = min(loc, l - loc);
            int long_count = max(loc, l - loc);
            min_count = max(short_count, min_count);
            max_count = max(long_count, max_count);
        }
        cout << min_count << " " << max_count << "\n";
    }
    
    
}