1-A 테스트 케이스는 통과하는데 틀렸다고 뜹니다 ㅠ
안녕하세요 선생님,
강의 잘 보고 있습니다.
http://boj.kr/af15ab332b77463faa58e47e6826ca48
선생님께서 설명하신 방법과 비슷한데, 일곱 난쟁이가 아닌 두 명을 잡아내기 위해 아홉개의 입력값의 합 sum에서 일곱 난쟁이 키의 합인 100을 뺀 sum-100 을 sub라는 변수에 담아두었고, 이중for문을 이용해 두 입력값의 합이 sub와 일치하는 두 수를 찾아냈습니다. 배열은 삭제가 안되니 그냥 저 두수를 0으로 처리하고 sort를 통해 오름차순으로 정렬한 다음, 출력할 때 두번째 인덱스부터 출력하도록 코드를 짜봤습니다.(0으로 바뀐 두 수는 맨 앞인 0번째와 1번째에 위치하게 되어 2번째 인덱스부터 출력하도록 하여 출력이 안되는 것을 의도) 야매스러운 방법이긴 하지만.... 그래도 어느 부분에서 예외가 발생했는지 확실히 알고 싶어 이렇게 질문드립니다!
답변 1
0
안녕하세요 영수님 ㅎㅎ
for(int i=0; i<9; i++){
for(int j=i+1; j<9; j++){
if(a[i] + a[j] == sub){
a[i] = 0;
a[j] = 0;
}잘하셨습니다.
다만, 이 문제의 경우 이렇게 답이 되는 경우의 수가 많이 존재합니다.
문제 지문을 볼까요?
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
이렇게 되어있죠?
따라서 해당 부분을 찾을 경우 바로 break;를 걸어주는게 필요합니다.
어? 너 정답이야?
야야!! 바로 빠져나와!! 더 다른 정답인 경우의수가 있으니까.
이렇게요.
#include<bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int a[9];
for(int i = 0; i < 9; i++){
cin >> a[i];
}
int sum = 0;
for(int i=0; i<9; i++){
sum += a[i];
}
int sub = sum-100;
for(int i=0; i<9; i++){
for(int j=i+1; j<9; j++){
if(a[i] + a[j] == sub){
a[i] = 0;
a[j] = 0;
break;
}
}
if(a[i] == 0)break;
}
sort(a, a+9);
for(int i=2; i<9; i++){
cout << a[i] << "\n";
}
return 0;
}이렇게 고쳐보시겠어요?
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
코살구 1주차 1940번 문제 조건과 프라이빗 테스트 불일치 문의
0
15
2
문제를 고민하는 시간 관련
0
24
2
코딩살구클럽
0
36
2
코딩살구클럽 문의
0
33
2
코딩살구클럽 승인
0
34
2
DP 경우의 수 설명이 이해가 되지 않습니다.
0
33
2
3-F 채점 관련 질문
0
30
1
BFS, DFS 활용이 되는 상황에서의 방향성
0
33
2
코딩살구클럽 승인
0
44
2
코딩살구클럽승인
0
39
3
코딩살구클럽 승인
0
51
2
3-D 관련 질문
0
35
2
코살구 회원가입 문의
0
45
2
코살구 로그인 문제
0
65
2
3-A 문제 풀이 관련 질문
0
56
3
2-O 질문 있습니다
0
38
2
2-T 문제에 관한 질문
0
40
2
코딩 살구 클럽 접속 및 사용방법 문의
0
63
2
안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~
0
67
2
코딩살구클럽 로그인문제
0
85
3
코딩 살구 클럽 로그인 문제
0
85
2
2-J 채점관련 질문
0
67
3
코딩 살구 클럽 Python 지원 가능 여부
0
77
1
살구클럽 아이디 없음 문제
0
76
1





