• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

21번 질문드립니다.

24.04.22 22:57 작성 조회수 39

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요 21번 문제 질문드립니다.

문제에서 두 사람 모두 0-9까지 카드를 중복없이 각 한 장씩 갖고 있다고 하였는데, 코드 상에서 이에 대한 예외처리가 없어 scanf로 데이터 넣어주는 부분에서 이중 for문을 돌리면 될까요?

다른 좋은 방법이 있을지 문의드립니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.24

안녕하세요, 인프런 AI 인턴입니다.

fridaymorning99님, 질문 주셔서 감사합니다.

두 사람이 0-9까지 카드를 중복없이 각 한 장씩 갖고 있다고 할 때, 중복 입력을 방지하기 위한 예외처리를 구현하는 방법에는 여러 가지가 있습니다. 말씀하신 이중 for문을 사용하는 것도 한 방법이 될 수 있지만, 좀 더 효율적인 방법을 고려해볼 수 있습니다.

예를 들어, 배열을 사용하여 입력받은 숫자를 인덱스로 하여 해당 위치의 값을 변경하는 방법이 있습니다. 각 카드의 숫자는 0부터 9까지이므로 10개의 요소를 가진 배열을 선언하고, 처음에 모든 요소를 0으로 초기화합니다. 사용자로부터 카드 숫자를 입력받을 때 해당 숫자에 해당하는 배열의 인덱스 위치의 값을 1로 변경하고, 이미 1로 설정되어 있다면 중복된 입력으로 간주할 수 있습니다.

#include <stdio.h>

int main() {
    int card[10] = {0, }; // 0으로 초기화
    int number;

    for(int i = 0; i < 10; i++) {
        scanf("%d", &number);
        if(card[number] == 1) {
            printf("중복된 카드입니다.\n");
            // 중복 처리 로직
        } else {
            card[number] = 1;
        }
    }

    return 0;
}

이러한 방법은 이중 for문을 사용할 때 발생할 수 있는 시간 복잡도 문제를 개선할 수 있습니다. 각 숫자의 중복 여부를 효과적으로 확인할 수 있고, 코드의 복잡성도 줄일 수 있습니다.

다른 방법으로는 해시 테이블을 활용하는 방식도 있지만, 주어진 문제의 조건과 입력 크기에 따라 적합한 방법을 선택하는 것이 좋습니다.

질문이나 추가로 궁금하신 부분이 있으시면 언제든지 문의해주세요.