본문 바로가기

Problem Solving/백준

[백준/C++] 23826번 와이파이


문제 설명이 장황한데 결국 첫 줄에 받은 공용와이파이가 manhattan distance( |X1 - X2| + |Y1 - Y2| ) 거리로 특정 방에 영향을 미치고 각 방에 설정된 공유기가 전파에 같은 방법으로 방해를 끼칠 때 가장 전파가 잘 터지는 방을 구하는 문제이다.

 

모든 방을 둘러보며 모든 공유기가 닿았을 때 미치는 결과를 확인해보아야 하므로 브루트포스로 해결할 수 있겠다는 생각을 하였다.

중간에 미치는 전파가 음수가 되는 실수를 했는데 예제 1번에서 잘 걸러줘 한 번에 성공할 수 있었다. 예제가 친절한 문제다..


/**
 * @file 25826.cpp
 * @author fpqpsxh
 * @date 2023-01-18
 **/
#include <iostream>
using namespace std ;
int signal_strength[1001][1001], maxim ;

class ROOM
{
    public:
        int x ;
        int y ;
        int p ;
};

int Effecting(int lhs_x, int lhs_y, int rhs_x, int rhs_y, int power)
{
    int signal = power - (abs(lhs_x - rhs_x) + abs(lhs_y - rhs_y)) ;
    return (signal <= 0) ? 0 : signal ;
}

int main()
{
    int N ;
    ios::sync_with_stdio(0), cin.tie(0) ;

    cin >> N ;
    ROOM room[N+1] ;

    for(int i = 0 ; i <= N ; i++)
        cin >>room[i].x >> room[i].y >> room[i].p ;
    
    for(int i = 1 ; i <= N ; i++)
    {
        signal_strength[room[i].x][room[i].y] = Effecting(room[0].x, room[0].y, room[i].x, room[i].y, room[0].p) ;
        for(int j = 1 ; j <= N ; j++)
        {
            if(signal_strength[room[i].x][room[i].y] <= 0) break ;
            signal_strength[room[i].x][room[i].y] -= Effecting(room[j].x, room[j].y, room[i].x, room[i].y, room[j].p) ;
        }
    }
    
    for(int i = 1 ; i <= N ; i++)
        if(maxim < signal_strength[room[i].x][room[i].y]) maxim = signal_strength[room[i].x][room[i].y] ;
    
    maxim == 0 ? cout << "IMPOSSIBLE\n" : cout << maxim << '\n' ;
}

문제: https://www.acmicpc.net/problem/23826

 

23826번: 와이파이

가까운 소학습실까지도 나가기 싫어하는 우석이는 방에서 WiFi를 사용하고 싶어한다. 기본적으로 소학습실에도 공용 WiFi가 제공되어 있지만, 소학습실의 WiFi 속도에 만족하지 못한 학생들은 핫

www.acmicpc.net