반응형
DoZZang
Do IT
DoZZang
전체 방문자
오늘
어제
  • Programming
    • Git
    • Web
    • 기타
    • Python
      • CodeUp
    • Math
    • Algorithm
    • Baekjoon
    • C,C++
    • Life
      • 독서
      • Just
      • 영화

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DoZZang

Do IT

[C] 백준 3052번 : 나머지
Baekjoon

[C] 백준 3052번 : 나머지

2022. 8. 16. 12:40
반응형

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

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

코드

#include <stdio.h>

int main() {
  int a[10];
  int count = 0;
  for(int i = 0; i < 10; i++) {
    scanf("%d",&a[i]);
    a[i] %= 42;
  }
  for(int i = 0; i < 9; i++) {
    for(int j = i + 1; j < 10; j++) {
      if(a[i] == a[j] && a[i] != 42) { // a[i] != 42 조건을 넣어주지 않는다면 그냥 a[i] == a[j]한 것과 같게 중복 count가 되어서 넣었습니다.
        count++; 
        a[j] = 42; // 42로 나눈 나머지는 42 미만일 것이므로 42라는 값을 넣어줌으로써 같았던 값은 배제시키려고 했습니다. 
      }
    }
  }
  printf("%d",10 - count);
}

이 문제를 2일 간 고민했습니다.

☞ 풀이 전

크기가 10인 정수형 배열을 하나만 선언해도 나머지를 바로 넣어주면 되기 때문에 문제가 없다고 생각했습니다. 배열 안의 원소들 중 같은 수가 있다면 1씩 증가시켜 총 10개의 원소에서 빼주면 된다고 생각해 count를 0으로 초기화 해주었습니다.

 

☞ 왜?

이중 for문을 구성하여 각 원소의 값을 비교하되 값이 같을 시 count++;이라고 단순히 생각했었는데 같은 값이 3개 이상이라면 중복 count가 되었습니다. 중복을 어떻게 제거할까 고민하는 것이 관건이었습니다.

고민결과 42로 나눈다면 나머지는 42 미만이 될 것이므로 같은 값이 나왔을 때 원소의 크기가 큰 원소를 42로 초기화 시켜주고 count를 증가시키는 방법을 생각해냈습니다. 42로 초기화됨으로써 이 원소는 다른 원소와 절대 같아질 수 없기 때문입니다. 즉 같은 원소를 하나 발견했으니 이제 이 원소를 배제시키자는 생각이었습니다.

추가로 if조건식에 배열의 원소가 42인 것을 제외해야 중복 count가 되지 않습니다.

 

☞ 다른 사람의 코드

#include <stdio.h>


int main()
{
    int arr[10]; //입력받은 10개의 수를 각각 42로 나눈 나머지를 저장할 배열 선언
    int Different_remain = 0;
    for (int i = 0; i <= 9; i++) {
        scanf("%d", &arr[i]);
        arr[i] = arr[i] % 42; // 입력 값들의 나머지
    }
    for (int j = 0; j <= 9; j++) {
        int count = 0;
        for (int k = j + 1; k <= 9; k++) {
            if (arr[j] == arr[k]) {
                ++count;
            }
        }
        if (count == 0) {
            ++Different_remain;
        }
    }

    printf("%d", Different_remain);
    return 0;

}
출처: https://abcdefgh123123.tistory.com/160 [꾸준함의 기록:티스토리]

정석적인 풀이는 없다고 하지만 출제자가 원한 풀이는 이것일지도 모르겠네요. 항상 0에 주목해서 생각하는 습관을 기르겠습니다. 

반응형

'Baekjoon' 카테고리의 다른 글

[C] 백준 8958번 : OX퀴즈  (1) 2022.09.08
[C] 백준 1546번 : 평균  (0) 2022.08.16
[C] 백준 2439번 : 별 찍기 - 2  (0) 2022.08.13
[C] 백준 15552번 : 빠른 A+B  (0) 2022.08.12
[C] 백준 2480번 : 주사위 세개  (0) 2022.08.11
    'Baekjoon' 카테고리의 다른 글
    • [C] 백준 8958번 : OX퀴즈
    • [C] 백준 1546번 : 평균
    • [C] 백준 2439번 : 별 찍기 - 2
    • [C] 백준 15552번 : 빠른 A+B
    DoZZang
    DoZZang
    과정은 힘들지만 성장은 즐겁습니다.

    티스토리툴바