알고리즘 문제풀이 - 두 번째 최솟값 찾기

한창희·2022년 1월 4일
0

문제

9개의 서로 다른 자연수가 주어질 때, 이들 중 두 번째 최솟값을 찾고, 그 두 번째 최솟값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어지면, 이들 중 두 번째 최솟값은 12이고, 이 값은 4번째 수이다.


입력

첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 10,000,000 보다 작다.


출력

첫째 줄에 두 번째 최솟값을 출력하고, 둘째 줄에 두 번째 최솟값이 몇 번째 수인지를 출력한다.


예제 입력

3
29
38
12
57
74
40
85
61


예제 출력

12
4


#include <stdio.h>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

vector<pair<int, int>> v;


int main() {

	for (int i = 0; i < 9; i++) {
		int a;
		scanf("%d", &a);

		pair<int, int> p = { a, i };
		v.push_back(p);
	}

	sort(v.begin(), v.end());
    // compare 함수 없이 위와 같이 sort함수를 사용하면
    // pair의 first 기준 오름차순 정렬이 기본적으로 적용된다!!

	printf("%d\n", v[1].first);
	printf("%d\n", v[1].second + 1);
	

	return 0;
}


// 두 번째 최솟값을 찾는다
// 인덱스 기준 1번째 찾기!

  • 각 수가 처음 입력 시 몇 번째로 입력되었는지에 대한 정보를 가지고 있어야 해서 pair 을 활용해봤다

  • pair 타입의 vector를 sort하는 내용은 추후 자세히 다뤄보도록 하겠다

profile
매 순간 최선을 다하자

0개의 댓글