[백준] 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)
  • 전체
    오늘
    어제
    • ◻ 전체 글 수 : (131)
      • ✪ 취미, 경험 회고 및 일상 (26)
        • [취미] Room Escape (2)
        • [회고] IT 관련 경험 회고 (18)
        • [일상] 일상 생각 (4)
        • [일상] 독후감 (1)
      • ◼ FrontEnd (29)
        • Web & HTML, CSS (8)
        • 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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바