[백준] 2039번 : 일곱 난쟁이 (🥉브론즈 2) (C++)

2023. 1. 20. 02:53·◼ PS Note/백준
반응형

문제 바로 가기

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 


풀이

  • 사용 언어 : C++
  • 풀이한 날짜 : 2021-09-18
#include <iostream>
#include <cstdio>
using namespace std;


// 선택정렬 알고리즘을 구현한 두 개의 함수
int getMinIndexInRange(int* data, int n, int begin, int end)
{
  int minIndex = begin;
  int minValue = data[begin];

  for (int i = begin; i < n; i++)
  {
    if (minValue > data[i])
    {
      minValue = data[i];
      minIndex = i;
    }
  }
  return minIndex;
}

void selectionSort(int* data, int n)
{
  for (int i = 0; i < n-1; i++)
  {
    int minIndex = getMinIndexInRange(data, n, i, n-1);
    int temp = 0;

    temp = data[minIndex];
    data[minIndex] = data[i];
    data[i] = temp;
  }
}


// 메인 함수
int main()
{
  int tallSum = -100;
  int* tall = NULL;
  int* tall2 = NULL;

  tall = new int[9];
  tall2 = new int[7];
  
  // 난쟁이들 키를 입력 받을때부터 더해 합을 tallSum변수에 저장
  for (int i = 0; i < 9; i++)
  {
    scanf("%d", &tall[i]);
    tallSum += tall[i];
  }

  // 이중 반복문으로 두 명의 가짜 난쟁이를 탐색
  for (int i = 0; i < 9; i++) {
    for (int j = i+1; j < 9; j++) {
      if(tall[i] + tall[j] == tallSum) {
        tall[i] = 0; tall[j] = 0;
        goto EXIT;
      }
    }
  }

EXIT:
  // tall2 새 배열에 진짜 7명의 난쟁이들의 키를 대입
  int k = 0;
  int l = 0;
  while (k < 9)
  {
    if (tall[k] != 0)
    {
      tall2[l] = tall[k];
      l++;
    }
    k++;
  }

  // 선탣 정렬 알고리즘으로 키를 오름차순으로 나열
  selectionSort(tall2, 7);

  for (int i = 0; i < 7; i++)
  {
    cout << tall2[i] << endl;
  }

  delete[] tall;
  delete[] tall2;

  return 0;
}

(예전에 기록해둔 풀이를 그대로 옮겨온 것이기에, 부가 설명이 없다는 점 양해 부탁드립니다.)

 

반응형

'◼ PS Note > 백준' 카테고리의 다른 글

[백준] 2525번 : 오븐 시계 (🥉브론즈 5) (Python)  (0) 2023.01.20
[백준] 2163번 : 초콜릿 자르기 (🥉브론즈 3) (Python)  (2) 2023.01.20
[백준] 1010번 : 더하기 사이클 (🥉브론즈 1) (Python)  (2) 2023.01.20
[백준] 10699번 : 오늘 날짜 (🥉브론즈 5) (Python)  (0) 2023.01.20
[백준] 1010번 : 다리 놓기 (🥈실버 5) (C++)  (0) 2023.01.20
'◼ PS Note/백준' 카테고리의 다른 글
  • [백준] 2163번 : 초콜릿 자르기 (🥉브론즈 3) (Python)
  • [백준] 1010번 : 더하기 사이클 (🥉브론즈 1) (Python)
  • [백준] 10699번 : 오늘 날짜 (🥉브론즈 5) (Python)
  • [백준] 1010번 : 다리 놓기 (🥈실버 5) (C++)
SangYoonLee (SYL)
SangYoonLee (SYL)
Slow, But Steady Wins The Race 😎
    반응형
  • SangYoonLee (SYL)
    ◆ Slow, But Steady ◆
    SangYoonLee (SYL)
  • 전체
    오늘
    어제
    • ◻ 전체 글 수 : (132)
      • ✪ 취미, 경험 회고 및 일상 (26)
        • [취미] Room Escape (2)
        • [회고] IT 관련 경험 회고 (18)
        • [일상] 일상 생각 (4)
        • [일상] 독후감 (1)
      • ◼ FrontEnd (30)
        • Web & HTML, CSS (9)
        • JavaScript (4)
        • TypeScript (1)
        • ReactJS (16)
      • ◼ CS (3)
        • 자료구조 & 알고리즘 (1)
        • 컴퓨터 구조 (1)
        • 운영체제 (1)
      • ◼ PS Note (40)
        • 백준 (38)
        • 프로그래머스 (2)
      • ◼ IT Etc. (33)
        • (Until 2021) (21)
        • Python (6)
        • C | C# | C++ (1)
        • Git (1)
        • Unity (4)
        • Game Dev. (0)
  • 블로그 메뉴

    • 홈
    • 💻 GitHub
    • 🟢 Velog
    • 🧩 온라인 방탈출 출시 작품 모음
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    wecode
    React
    C++
    파이썬
    백준
    회고
    리엑트
    미궁 게임
    소수 구하기
    주간 회고
    더라비린스
    코드숨
    개인 프로젝트
    프로젝트
    CodeSoom
    후기
    방탈출고사
    Cpp
    관심사의 분리
    unity
    Python
    pygame
    Component
    위코드
    JavaScript
    1929
    알고리즘
    프로그래머스
    유니티
    코딩 일기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
SangYoonLee (SYL)
[백준] 2039번 : 일곱 난쟁이 (🥉브론즈 2) (C++)
상단으로

티스토리툴바