1. 문제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int cnt = 0;
int arr[11] = { 0, };
for (int i = 1; i <= 10; i++)
{
int A;
scanf("%d", &A);
arr[i] = A % 42;
}
for (int i = 1; i <= 10; i++)
{
for (int j = 1; j <= i; j++)
{
if (i == j)
cnt++;
if (arr[i] == arr[j])
break;
}
}
printf("%d", cnt);
return 0;
}
2. 해결 방법
for (int i = 1; i <= 10; i++)
{
for (int j = 1; j <= i; j++)
{
if (i == j)
cnt++;
if (arr[i] == arr[j])
break;
}
}
arr배열
i |
내가 비교할 arr[i]를 기준으로 j = 1부터 i까지 훑는다. (배열 index가 0부터 시작인데 헷갈려서 index 1번부터 사용함)
1. 비교하는 숫자와 동일한 숫자를 만나면 arr[i] == arr[j], break로 탈출하고 arr[i+1]로 넘어간다.
2. 비교하는 숫자와 동일한 숫자가 없다면 j가 진행하다 본인 i와 만나게 된다. 이 때, cnt가 1 증가한다. 동일한 숫자가 없다는 말은 본인과 중복하는 숫자가 없다는 말이다.
무식하게 하나씩 비교하는 코드이다.
3. 다른 해결 방법
int main()
{
int cnt = 0;
int arr[41] = { 0, };
for (int i = 1; i <= 10; i++)
{
int A;
scanf("%d", &A);
arr[A % 42] = 1;
}
return 0;
}
42로 나누면 0부터 41까지의 나머지가 생기고 나머지를 배열로 만든다. arr배열 index에 A % 42를 넣으면 해당 배열 값이 1이 된다. 입력을 모두 받은 다음 배열 값이 1인 index만 count하면 된다.
'BACKJOON, 백준' 카테고리의 다른 글
백준 1157번 - 중복값 확인 (0) | 2023.12.07 |
---|---|
백준 2566번 최대값 초기 설정 (0) | 2023.12.04 |
백준 10951번 EOF (0) | 2023.11.15 |
백준 2480번 주사위 세개 (0) | 2023.11.15 |
백준 2525번 오븐 시계 (0) | 2023.11.14 |