2024. 5. 8. 15:48ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/1668
문제
민식이는 “오민식”이라는 팀이름으로 수없이 많은 로봇대회를 우승했다. 따라서 민식이의 집에는 트로피가 많다. 민식이는 트로피를 어떤 선반 위에 올려놨다. 이 선반은 민식이의 방문을 열고 들어가자마자 선반의 왼쪽이 보인다. 다른말로 하자면, 뒤의 트로피가 앞의 트로피에 가려져 있다는 말이다.
안타깝게도, 높이가 큰 트로피가 높이가 작은 트로피의 왼쪽에 있다면, 높이가 작은 트로피는 큰 트로피에 가려서 보이지 않게 된다. 트로피는 자기의 앞에 (보는 사람의 관점에서) 자기보다 높이가 작은 트로피가 있을 때만 보이게 된다. 민식이는 선반을 180도 회전시켜서 트로피가 보이는 개수를 변하게 할 수도 있다.
선반위에 올려져 있는 트로피의 높이가 주어졌을 때, 왼쪽에서 봤을 때 보이는 개수와, 오른쪽에서 봤을 때 보이는 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 트로피의 개수 N (1 ≤ N ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 왼쪽의 트로피부터 차례대로 높이가 주어진다. 트로피의 높이는 100보다 작거나 같은 자연수이다.
출력
첫째 줄에 왼쪽에서 봤을 때 보이는 개수, 둘째 줄에 오른쪽에서 봤을 때 보이는 개수를 출력한다.
통과한 답안
namespace _1668
{
internal class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
int[] arr = new int[N];
int left = 0;
int leftMax = 0;
int right = 0;
int rightMax = 0;
for (int i = 0; i < N; i++)
{
arr[i] = int.Parse(Console.ReadLine());
if (arr[i] > leftMax)
{
left++;
leftMax = arr[i];
}
}
for (int i = N - 1; i >= 0; i--)
{
if (arr[i] > rightMax)
{
right++;
rightMax = arr[i];
}
}
Console.WriteLine(left);
Console.WriteLine(right);
}
}
}
주어진 길이의 배열을 생성해서 최댓값을 갱신하며
갱신되는 경우마다 보이는 트로피의 개수를 추가하는 방식으로 해결할 수 있다.
다만 위의 코드는 for문을 두 번 사용하므로 복잡한 느낌을 가질 수 있다.
따라서 아래와 같이 코드를 개선하여 입력을 받는 부분과 트로피의 개수를 확인하는 부분으로 나눌 수 있다.
namespace _1668
{
internal class Program
{
static void Main(string[] args)
{
int N = int.Parse(Console.ReadLine());
int[] arr = new int[N];
for (int i = 0; i < N; i++)
{
arr[i] = int.Parse(Console.ReadLine());
}
int left = 0;
int leftMax = 0;
int right = 0;
int rightMax = 0;
for (int i = 0; i < N; i++)
{
if (arr[i] > leftMax)
{
left++;
leftMax = arr[i];
}
if (arr[N - 1 - i] > rightMax)
{
right++;
rightMax = arr[N - 1 - i];
}
}
Console.WriteLine(left);
Console.WriteLine(right);
}
}
}
여기에서 오른쪽의 배열의 인덱스는 (N - i)가 아니라 (N - 1 - i)가 되는 부분이다.
(N개의 배열은 0번부터 N-1번 인덱스까지 있으므로)
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 3028: 창영마을 (C#) (0) | 2024.05.10 |
---|---|
[BAEKJOON] 백준 1712: 손익분기점 (C#) (0) | 2024.05.08 |
[BAEKJOON] 백준 1592: 영식이와 친구들(C#) (0) | 2024.05.08 |
[BAEKJOON] 백준 1568: 새(C#) (0) | 2024.05.08 |
[BAEKJOON] 백준 1453: 피시방 알바(C#) (0) | 2024.05.08 |