2024. 7. 9. 18:20ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/16162
문제
I'm in my dream~eam~eam ♬
3단 고음에 감명을 받은 가희는 고음 경진대회를 참관하기로 했다. 음의 계이름을 수로 표현해보자. '1옥타브 도'를 1로 표현하고 1음 올라갈 때마다 그 음을 표현하는 수도 1씩 커진다고 생각할 수 있다. 음 A를 시작으로 D음씩 올리면서 고음을 부르는 경우는 첫항이 A, 공차가 D인 등차수열로 표현되며, 이러한 등차수열의 항의 개수를 X라 할 때, 이 등차수열을 X단 고음이라고 한다. 아래는 A = 1, D = 2인 6단 고음이다.
이러한 경진대회에는 문제가 있었는데, 한 명 이상의 참가자들이 동시에 고음을 부르는 탓에 심사를 제대로 할 수 없다는 것이다. 그래서 우리는 수로 표현된 참가자들의 음이 순서대로 주어졌을 때 가능한 경우 중, 음 A를 시작으로 D음씩 올라가는 X단 고음으로 가능한 가장 큰 X를 구하려고 한다. 이를 도와주는 프로그램을 작성하자.
입력
첫째 줄에 참가자들의 음의 개수를 나타내는 정수 N(1 ≤ N ≤ 2 x 104), 고음의 첫 항과 공차를 의미하는 정수 A, D(1 ≤ A, D ≤ 107)가 공백으로 구분되어 주어진다.
둘째 줄에 참가자들의 음을 나타내는 N개의 정수가 순서대로 공백으로 구분되어 주어진다. 이 값은 107을 넘지 않는 양의 정수이다.
출력
음 A를 시작으로 D음씩 올라가는 X단 고음으로 가능한 가장 큰 X를 출력하라.
통과한 답안
namespace _16162
{
internal class Program
{
static void Main(string[] args)
{
string[] inputs = Console.ReadLine().Split(' ');
int N = int.Parse(inputs[0]);
int A = int.Parse(inputs[1]);
int D = int.Parse(inputs[2]);
int[] scales = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
int now = A;
int cnt = 0;
for (int i = 0; i < scales.Length; i++)
{
if (now == scales[i])
{
now += D;
cnt++;
}
}
Console.WriteLine(cnt);
}
}
}
음의 개수를 나타내는 정수 N, 첫항 A, 공차 D가 주어질 때,
N개의 음들 중에서 주어진 첫항과 공차를 이용한 등차수열이 몇 개 존재하는지 찾는 문제이다.
주어진 N개의 정수를 입력받은 후에,
첫항을 찾고, 그 뒤에 공차를 더하면서 다음 항을 찾아서
찾은 항의 개수를 출력하도록 구현하였다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 1940: 주몽 (C#) (0) | 2024.07.31 |
---|---|
[BAEKJOON] 백준 27922: 현대모비스 입사 프로젝트 (C#) (0) | 2024.07.09 |
[BAEKJOON] 백준 11283: 한글 2 (C#) (0) | 2024.07.09 |
[BAEKJOON] 백준 11282: 한글 (C#) (0) | 2024.07.09 |
[BAEKJOON] 백준 6504: 킬로미터를 마일로 (C#) (1) | 2024.06.30 |