둠치킨
코딩하는 둠치킨
둠치킨

블로그 메뉴

  • 홈
  • 분류 전체보기 (220) N
    • BOJ (173) N
      • 스택 (14)
      • 큐 (5)
      • 덱 (4)
      • 그래프 (30)
      • 배열 (8)
      • 재귀 (12)
      • 브루트 포스 (2)
      • 그리디 알고리즘 (7)
      • 다이내믹 프로그래밍 (13)
      • 백트래킹 (24)
      • 기하학 (4)
      • 트리 (4)
      • 구현 (14)
      • 수학 (3)
      • 맵 (1)
      • 다익스트라 (2)
      • 누적합 (5)
      • 유니온 파인드 (2) N
    • 자료구조 (14)
      • 스택 (3)
      • 큐 (5)
      • 덱 (2)
      • 그래프 (1)
      • 트리 (1)
      • 힙 (1)
      • 정렬 (1)
    • C++ (11)
      • 모두의코드 (2)
      • Effective C++ (3)
      • C++ STL (6)
    • 컴파일러 (1)
    • OS (17)
    • 컴퓨터 구조 (2)
    • Unreal Engine 5 (2)

공지사항

전체 방문자
오늘
어제

인기 글

최근 글

태그

  • BFS
  • boj
  • Bruteforce
  • C
  • C++
  • C++ STL
  • Cache Memory
  • deadlock
  • DFS
  • Effective C++
  • java
  • Mutex
  • next_permutation
  • os
  • Process
  • rotate
  • semaphore
  • spin lock
  • STL
  • STL C++
hELLO · Designed By 정상우.
둠치킨

코딩하는 둠치킨

BOJ

2752번: 세수정렬

2022. 1. 12. 23:44

2752번: 세수정렬(BOJ C/C++)

사용 언어: C++

문제

동규는 세수를 하다가 정렬이 하고싶어졌다.

숫자 세 개를 생각한 뒤에, 이를 오름차순으로 정렬하고 싶어 졌다.

숫자 세 개가 주어졌을 때, 가장 작은 수, 그 다음 수, 가장 큰 수를 출력하는 프로그램을 작성하시오.

입력

숫자 세 개가 주어진다. 이 숫자는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 이 숫자는 모두 다르다.

출력

제일 작은 수, 그 다음 수, 제일 큰 수를 차례대로 출력한다.

 

첫 번째 풀이

그냥 버블정렬과도 같고 풀이들 중 시간복잡도가 가장 긴 O(n^2) 이다. 물론 지금은 배열의 크기가 작아서 상관없지만 크기가 커지만 이 풀이는 지양적이다.

#include <bits/stdc++.h>
using namespace std;
int arr[4];

int main(void){
    ios::sync_with_stdio(0);
    cin.tie(0);

	for(int i=0;i<3;i++)
		cin>>arr[i];
	for(int i=0;i<2;i++)
		for(int j=0;j<2-i;j++)
			if(arr[j]>arr[j+1])
				swap(arr[j],arr[j+1]);
	for(int i=0;i<3;i++)
		cout<<arr[i]<<' ';

	return 0;
}

 

두 번째 풀이

algorithm 헤더에 있는 min과 max 함수를 사용. 중간 값은 숫자가 세개밖에 없으므로 e=a+b+c-d-f 처럼 단순하게 표현할 수 있다. 이 문제에 최적화된 풀이.

#include <bits/stdc++.h>
using namespace std;
int arr[4];

int main(void){
    ios::sync_with_stdio(0);
    cin.tie(0);

	int a, b, c;
	cin>>a>>b>>c;
 	int d, e, f;
	d = min({a,b,c});
	f = max({a,b,c});
	e = a+b+c-d-f;
	cout<<d<<' '<<e<<' '<<f;

	return 0;
}

 

세 번째 풀이

가장 단순명료한 algorithm 헤더의 sort 함수. 오름차순으로 정렬을 해준다. 또한 시간복잡도도 O(n*logn) 이어서 버블정렬의 O(n^2) 보다는 좋다.

#include <bits/stdc++.h>
using namespace std;
int arr[4];

int main(void){
    ios::sync_with_stdio(0);
    cin.tie(0);

	int arr[4];
    for(int i=0;i<3;i++)
    	cin>>arr[i];
    sort(arr, arr+3);
    for(int i=0;i<3;i++)
 	    cout<<arr[i]<<" ";
	
	return 0;
}

 

느낀 점

현재 c++로 푸는 문제들이 쉬운 편에 속하지만 각 헤더에 있는 함수들을 새로 배워나가는 재미는 있어서 좋다. 그리고 이런 단순한 항목의 문제들은 따로 카테고리를 두지 않고 태그로만 분류하겠다 (예로 이번 문제는 정렬).

 

저작자표시 (새창열림)

'BOJ' 카테고리의 다른 글

18870번: 좌표 압축  (0) 2024.09.26
10816번: 숫자 카드 2  (0) 2022.02.04
1929번: 소수 구하기  (0) 2022.01.27
2480번: 주사위 세개  (0) 2022.01.15
2443번: 별 찍기 - 6  (0) 2022.01.12
    'BOJ' 카테고리의 다른 글
    • 10816번: 숫자 카드 2
    • 1929번: 소수 구하기
    • 2480번: 주사위 세개
    • 2443번: 별 찍기 - 6
    둠치킨
    둠치킨
    코딩 공부를 위한 코딩 블로그 기록 일기

    티스토리툴바