[BAEKJOON] 백준 2246: 콘도 선정 (C#)

2024. 6. 8. 00:05IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/2246

 

 

문제

콘도를 선정할 때에는 가급적이면 싸고 바닷가에 가까운 곳으로 하려 한다. 이를 위해 우선 적당한 콘도 몇 곳을 후보로 선정하려 하는데, 다음 두 조건을 만족하는 콘도 X가 후보가 된다.

  1. X보다 바닷가에 더 가까운 콘도들은 모두 X보다 숙박비가 더 비싸다.
  2. X보다 숙박비가 더 싼 콘도들은 모두 X보다 바닷가에서 더 멀다.

각 콘도의 바닷가에서의 거리와 숙박비에 대한 정보가 주어졌을 때, 후보 콘도의 개수를 구해내는 프로그램을 작성하시오.

 

 

입력

첫째 줄에 콘도의 개수를 나타내는 자연수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 콘도에 대한 정보를 나타내는 두 정수 D(1 ≤ D ≤ 10,000), C(1 ≤ C ≤ 10,000)가 주어진다. D는 그 콘도의 바닷가로부터의 거리를 나타내고, C는 그 콘도의 숙박비를 나타낸다. 서로 다른 두 콘도의 D 값과 C값이 모두 같은 입력은 주어지지는 않는다.

 

 

출력

첫째 줄에 후보가 될 수 있는 콘도의 수를 출력한다.

 

 

 

통과한 답안

namespace _2246
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int N = int.Parse(Console.ReadLine());
            List<(int Distance, int Price)> condos = new List<(int Distance, int Price)> ();

            for (int i = 0; i < N; i++)
            {
                string[] inputs = Console.ReadLine().Split(' ');
                int D = int.Parse(inputs[0]);
                int C = int.Parse(inputs[1]);
                condos.Add((D, C));
            }

            int cnt = 0;

            for (int i = 0; i < N; i++)
            {
                bool isChip = true;

                for (int j = 0; j < N; j++)
                {
                    if (i != j)
                    {
                        if ((condos[j].Distance < condos[i].Distance && condos[j].Price <= condos[i].Price) ||
                            (condos[j].Price < condos[i].Price && condos[j].Distance <= condos[i].Distance))
                        {
                            isChip = false;
                            break;
                        }
                    }
                }

                if (isChip)
                {
                    cnt++;
                }
            }

            Console.WriteLine(cnt);
        }
    }
}

 

문제에서 주어진 조건을 그대로 구현해야되는 문제로,

조건 2가지가 X라는 후보가 있을 때,

1. X보다 가까운 콘도들은 모두 X보다 비싸야 한다.

2. X보다 싼 콘도들은 모두 X보다 멀어야 한다.

 

이 두 조건을 한 번에 적용하기 애매하기 때문에

if ((condos[j].Distance < condos[i].Distance && condos[j].Price <= condos[i].Price) ||
    (condos[j].Price < condos[i].Price && condos[j].Distance <= condos[i].Distance))
{
    isChip = false;
    break;
}

 

위와 같이 if문을 사용해서 조건을 만족하면 후보가 될 수 없게 구현하여

이를 통과한 후보들만 카운팅하도록 작성했다.