[BAEKJOON] 백준 2246: 콘도 선정 (C#)
2024. 6. 8. 00:05ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/2246
문제
콘도를 선정할 때에는 가급적이면 싸고 바닷가에 가까운 곳으로 하려 한다. 이를 위해 우선 적당한 콘도 몇 곳을 후보로 선정하려 하는데, 다음 두 조건을 만족하는 콘도 X가 후보가 된다.
- X보다 바닷가에 더 가까운 콘도들은 모두 X보다 숙박비가 더 비싸다.
- 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문을 사용해서 조건을 만족하면 후보가 될 수 없게 구현하여
이를 통과한 후보들만 카운팅하도록 작성했다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 14495: 피보나치 비스무리한 수열 (C#) (0) | 2024.06.09 |
---|---|
[BAEKJOON] 백준 2748: 피보나치 수 2 (C#) (1) | 2024.06.09 |
[BAEKJOON] 백준 1678: 기차 (C#) (1) | 2024.06.07 |
[BAEKJOON] 백준 2546: 경제학과 정원영 (C#) (1) | 2024.06.07 |
[BAEKJOON] 백준 2160: 그림 비교 (C#) (1) | 2024.06.07 |