인프런 커뮤니티 질문&답변

fridaymorning99님의 프로필 이미지
fridaymorning99

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

21. 카드게임(기본코딩설계)

21번 질문드립니다.

작성

·

103

0

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

 

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

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

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

답변 1

0

안녕하세요, 인프런 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문을 사용할 때 발생할 수 있는 시간 복잡도 문제를 개선할 수 있습니다. 각 숫자의 중복 여부를 효과적으로 확인할 수 있고, 코드의 복잡성도 줄일 수 있습니다.

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

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

fridaymorning99님의 프로필 이미지
fridaymorning99

작성한 질문수

질문하기