[algorithm] 백준 2309번 일곱난쟁이

2025. 10. 18. 18:37·algorithm/기초 코드
반응형

 

처음에는 배열의 원소를 이중 for문으로 추적하면서

2가지 원소를 찍고 그 원소들을 제외한 나머지들의 합이 100이되는 경우를 찾아보려했는데

도저히 구현이 안되고 코드가 복잡해졌다.

 

알고보니 반대로 원소들의 전체 합에서 2가지 원소를 뺀 값이 100이 되는 경우를 생각하면 되는 것이였다

 

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>

using namespace std;

int main() {
    vector<int> vec;    
    
    for (int tmp=0; tmp<9; tmp++)
        {
            int value;
            cin >> value;
            vec.push_back(value);
            
            
        }
    
    int sum = accumulate(vec.begin(), vec.end(), 0);

    for (int i=0; i<9; i++)
        {
            for (int j=(i+1); j<9; j++)
                {
                    if (sum - (vec[i]+vec[j]) == 100) 
                        {
                           if (i < j)
                           {
                               vec.erase(vec.begin()+j);
                               vec.erase(vec.begin()+i);
                           }
                           else
                           {
                               vec.erase(vec.begin()+i);
                               vec.erase(vec.begin()+j);
                           }
                        
                               }
                }
        }
    
    sort(vec.begin(), vec.end());

    for(int x : vec)
        {
            cout << x << " ";
        }
    return 0;
}

 

배열의 원소를 삭제하고 싶을 때 erase() 함수를 사용하면된다

배열의 원소가 삭제됨과 동시에 크기도 줄어든다

 

이때문에 i와 j의 크기를 비교하여 erase() 부분을 처리 해준것이다

i가 j보다 작은데 i먼저 삭제하게 되면 배열의 길이가 줄어들기때문에

원하는 인덱스의 한 칸 뒤에 접근하게된다

 

그대로 구현을 해봤는데

틀렸다는 결과를 얻었다

 

문제를 잘 보니 가능한 정답이 여러가지인 경우 아무거나 출력한다 라는 말이 있었다

위의 코드는 어떤 케이스에서는 다섯 난쟁이가 되어버렸던 것이였다.

즉 가장 처음 조합이 생성되면 즉시 종료를 해도 된다는 의미로 생각했다

 

그래서 exit()함수를 사용해야겠다고 생각했다

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <stdlib.h>
using namespace std;

int main() {
    vector<int> vec;    
    
    for (int tmp=0; tmp<9; tmp++)
        {
            int value;
            cin >> value;
            vec.push_back(value);
            
            
        }
    
    int sum = accumulate(vec.begin(), vec.end(), 0);

    for (int i=0; i<9; i++)
        {
            for (int j=(i+1); j<9; j++)
                {
                    if (sum - (vec[i]+vec[j]) == 100) 
                        {
                           if (i < j)
                           {
                               vec.erase(vec.begin()+j);
                               vec.erase(vec.begin()+i);
                           }
                           else
                           {
                               vec.erase(vec.begin()+i);
                               vec.erase(vec.begin()+j);
                           }

                           sort(vec.begin(), vec.end());

                           for(int x : vec)
                            {
                                cout << x << " ";
                            }
                            exit(0);
                            
                        
                               }
                }
        }
    

    return 0;
}

 

정답이였다!

반응형

'algorithm > 기초 코드' 카테고리의 다른 글

[algorithm] 백준 10804 카드 역배치  (0) 2025.10.18
[algorithm] 백준 1267번 핸드폰 요금  (0) 2025.10.18
[algorithm] 백준 2587번 대표값2  (0) 2025.10.18
[algorithm] 백준 2576번 홀수  (0) 2025.10.18
[algorithm] 백준 2490번 윷놀이  (0) 2025.10.18
'algorithm/기초 코드' 카테고리의 다른 글
  • [algorithm] 백준 10804 카드 역배치
  • [algorithm] 백준 1267번 핸드폰 요금
  • [algorithm] 백준 2587번 대표값2
  • [algorithm] 백준 2576번 홀수
20puddle
20puddle
20puddle 님의 블로그 입니다.
  • 20puddle
    20puddle 님의 블로그
    20puddle
  • 전체
    오늘
    어제
    • 분류 전체보기 (100)
      • Spring boot (5)
      • git & github (5)
      • algorithm (47)
        • theory (3)
        • 배열 (7)
        • 연결 리스트 (3)
        • 스택 (5)
        • 큐 (3)
        • 덱 (2)
        • 기초 코드 (19)
        • BFS (5)
      • AI (43)
        • Machine Learning (35)
        • Deep Learning (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    연결리스트
    딥러닝
    AI
    그레디언트 클리핑
    홀드아웃 검증
    github
    주성분변환
    인공지능
    ML
    백준
    DL
    게시판
    알고리즘
    list
    Aimers
    Java
    머신러닝
    git
    오프라인 학습
    Spring Boot
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
20puddle
[algorithm] 백준 2309번 일곱난쟁이
상단으로

티스토리툴바