• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

1-A 질문합니다

24.03.04 12:04 작성 조회수 111

0

안녕하세요, 강사님.

저는 처음에 아홉 난쟁이의 키 분포를 저장할 수 있는 배열을 선언하고, 해당 키에 해당하는 난쟁이를 배열에 넣고, (전체 합 - 100)에 해당하는 난쟁이 두명을 찾는 방식으로 문제를 해결했습니다. 예제는 맞는데 틀렸다고 뜨는 이유를 모르겠습니다. 감사합니다.
http://boj.kr/7e220e252b364c1e8dbf2d7c16a72cd0

답변 2

·

답변을 작성해보세요.

0

안녕하세요 mu님 ㅎㅎ

진짜 한참을 찾았습니다... 이거 반례도 안되고.. 솔직히 맞다고 생각하거든요.

문제에서 서로다른 값들이 나오는 거기 때문에 int형 배열로 해도 로직상 괜찮구요.

 

이 코드에 틀린 점은 없습니다.

 

다만.

#include <iostream>

using namespace std;

int height[101];    //난쟁이 키 분포 저장

int main(){    
    //1. 난쟁이 키 저장 및 합 구하기
    int sum = 0;
    int tmp = 0;
    for(int i=0; i < 9; i++){
        cin>>tmp;
        height[tmp]++;
        sum += tmp;
    }
    int diff = sum - 100;
    for(int h = 1 ; h<diff ; h++){
        if(height[h] && height[diff-h]){
            if((h==diff-h)&&height[h]==1) continue;
            height[h]--;
            height[diff-h]--;
            break;
        }
    }

    int cnt = 0;
    for(int i=1 ; i<=100 ; i++){
        if(cnt==7) break;
        if(height[i]){
            cout<<i<<'\n';
            cnt++;
        }
    }
}

이렇게 ios를 지우고 하면 맞습니다.

왜 그런지는 저도 잘 모르겠습니다..

여러번 시도해본 끝에 겨우 찾아낸 정해입니다.

이부분에 대해서는 제가 백준에 질문을 남기도록 하겠습니다.

질문 - 답글 받으면 다시 댓글 남기도록 하겠습니다.

 

참고로 ios를 넣으면 이문제는 안통과하는 것이 아니냐.

할 수 있는데요.

 

#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점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.04

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

mu_ 님, 질문하신 내용의 경우 이미 다른 수강생들의 질문에서 유사한 내용을 다룬 답변이 몇 가지 보입니다. 이러한 답변들은 일곱 난쟁이 문제를 해결하는 과정에서 발생할 수 있는 일반적인 문제를 다루고 있습니다.

제공된 정보를 통해 질문하신 내용을 해결할 수 있는 리소스를 찾았습니다. 아래의 URL을 참고하시면 키 배열과 관련된 가정과 해결 방법에 대해 이해하고 구현하신 코드에 적용할 수 있을 것 같습니다.

  • 1-A 일곱난쟁이 문제입니다
    • 이 답변에서는 전역변수로 선언 된 sum을 초기화하는 방법과 그 필요성에 대해 설명하고 있습니다. 구현한 코드의 sum 처리와 관련하여 참고하실 수 있습니다.
  • 1-A 일곱난쟁이 질문입니다
    • 이 답변에서는 조건문 내에서 return을 적절히 사용하는 방법에 대한 설명이 포함되어 있으며, 이는 코드의 흐름 제어와 직결되는 중요한 사항이므로 주의 깊게 확인이 필요합니다.
  • 일곱 난쟁이 (조합) 질문입니다
    • 해당 답변에서는 조합을 사용한 풀이에 관한 구체적인 설명이 있으며, 오류를 발견하고 수정하는 방법에 대한 힌트가 제공됩니다.

위의 답변들을 참조하여 문제 해결 방법에 대해 보다 깊게 이해하고, 코드의 오류를 찾아 수정하시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.