21번 질문드립니다.
145
작성한 질문수 1
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 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문을 사용할 때 발생할 수 있는 시간 복잡도 문제를 개선할 수 있습니다. 각 숫자의 중복 여부를 효과적으로 확인할 수 있고, 코드의 복잡성도 줄일 수 있습니다.
다른 방법으로는 해시 테이블을 활용하는 방식도 있지만, 주어진 문제의 조건과 입력 크기에 따라 적합한 방법을 선택하는 것이 좋습니다.
질문이나 추가로 궁금하신 부분이 있으시면 언제든지 문의해주세요.
87번 채점 프로그램에 오류가 있는 것 같습니다.
0
89
2
그리디 파트
0
115
2
안녕하세요. 선생님(54번 코드 관련 문의)
0
141
2
테스트 파일 exit_coe_1, time_limit_exceeded 질문
0
143
1
C언어로 코드를 짜면 채점 시에 한 문제 빼고 시간 초과가 발생하는데 해결하는 방법이 있을까요?
0
172
1
19번 질문있습니다
0
123
1
6번 관련 채점오류입니다
0
88
2
22번 문제는 C로 풀어주신 건가요 C++로 풀어주신 건가요?
0
166
2
dev C++ 콘솔창 바로 닫힘
0
245
1
최신화하기
0
171
1
채점이 안되요...
1
260
1
안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.
0
113
1
45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?
0
155
1
39번 두 배열 합치기 문제 채점 오류인가 코드 오류인가
0
155
0
채점기에서 틀렸다고 나오는데 이유를 모르겠습니다.
0
149
2
해당 강의에서 C언어로만 진행하는 강의 문의 건
0
144
2
87번 문제 섬나라 아일랜드 질문
0
128
1
16번 문제에서 직접 답을 대입하면 정답이 나오는데 채점에서 wrong answer가 나옵니다.
0
149
1
40번 교집합 문제
0
166
1
43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.
0
170
1
41. 연속된 자연수의 합 문제 질문있습니다.
0
165
1
질문있습니다.
0
193
2
시간초과가 나요
0
172
1
43번 문제 3 ~ 5번에 문제가 있는것 같습니다.
0
247
1





