본문 바로가기

CodingTest Exam/[C++] Algorithm Study

33. 3등의 성적은? (it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비) ★☆☆☆☆

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

using namespace std;
int main()
{
	int n;
	scanf("%d", &n);
	
	vector<int> num(n, 0);
	for(int i = 0; i < num.size(); i++)
		scanf("%d", &num[i]);
		
	sort(num.rbegin(), num.rend());
	
	int count = 1;
	int temp = num[0];
	for(int i = 0; i < num.size(); i++)
	{
		if(count == 3)
		{
			printf("%d", temp);
			break;
		}
		
		if(temp > num[i])
		{
			count++;
			temp = num[i];
		}
	}
	return 0;
	
}

1. <algorithm> 헤더의 sort() 를 응용(내림차순으로 정렬)

이전 문제처럼 오름차순이 아니라 내림차순으로 정렬할 때는 sort(num.rbegin(), num.rend()) 를 활용한다.

2. num[0]이 최고점수이며, 1등이기 때문에 count는 1로 초기화한다.

3. 낮은 점수를 만날 때마다 temp가 그 점수로 바뀌고 count++ 을 한다.

 

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

using namespace std;
int main()
{
	int n;
	scanf("%d", &n);
	
	vector<int> num(n, 0);
	for(int i = 0; i < num.size(); i++)
		scanf("%d", &num[i]);
		
	int temp = 0;
	for(int i = 0; i < n-1; i++)
	{
		int idx = i;
		for(int j = i+1; j < n; j++)
		{
			if(num[j]>num[idx]) idx = j; 
		}
		temp = num[i];
		num[i] = num[idx];
		num[idx] = temp;
	}
	
	int count = 0;
	for(int i = 1; i < n; i++)
	{
		if(num[i-1] > num[i])
			count++;
		
		if(count == 2)
		{
			printf("%d", num[i]);
			break;
		}
	}
	return 0;
}

1. 라이브러리 사용없이 스왑하는 방법이다.