본문 바로가기

Algorithm/Sorting

(28)
(C++) - 프로그래머스(위클리 챌린지) : 8주차_최소직사각형 https://programmers.co.kr/learn/courses/30/lessons/86491 코딩테스트 연습 - 8주차_최소직사각형 [[10, 7], [12, 3], [8, 15], [14, 7], [5, 15]] 120 [[14, 4], [19, 6], [6, 16], [18, 7], [7, 11]] 133 programmers.co.kr 정렬을 사용한 구현 문제였습니다. 📕 풀이방법 📔 풀이과정 명함을 90도 회전할 수 있기 때문에 아예 명함을 고정해버리는 방법을 생각하는 것이 간단합니다. sizes의 원소마다 sort를 한뒤 첫 번째 원소의 최댓값은 width에, 두 번째 원소의 최댓값은 height에 저장합니다. 📔 정답출력 width * height의 결과값을 출력합니다. 📕 Code ..
(C++) - 프로그래머스(위클리 챌린지) : 6주차 https://programmers.co.kr/learn/courses/30/lessons/85002 코딩테스트 연습 - 6주차_복서 정렬하기 복서 선수들의 몸무게 weights와, 복서 선수들의 전적을 나타내는 head2head가 매개변수로 주어집니다. 복서 선수들의 번호를 다음과 같은 순서로 정렬한 후 return 하도록 solution 함수를 완성해주세요 programmers.co.kr 정렬 및 구현문제였습니다. 📕 풀이방법 📔 입력 및 초기화 승률, 자기자신보다 무거운 복서를 이긴 횟수, 선수 번호를 저장할 vector 변수들을 선언합니다. 그리고 몸무게 정보도 전역변수로 이용하기 위해 따로 저장합니다. player를 weights.size()만큼 1씩 증가해 선수들의 번호를 저장해줍니다. 📔 풀..
(C++) - 백준(BOJ) 20207번 : 달력 https://www.acmicpc.net/problem/20207 20207번: 달력 수현이는 일년의 날짜가 1일부터 365일로 표시되어있는 달력을 가지고있다. 수현이는 너무나도 계획적인 사람이라 올 해 일정을 모두 계획해서 달력에 표시해놨다. 여름이 거의 끝나가자 장 www.acmicpc.net 정렬 후 구현하는 문제였습니다. 📕 풀이방법 📔 입력 및 초기화 pair형 vector변수 plan을 선언합니다. 그 후 n만큼 차례대로 입력받습니다. 이 후 조건대로 시작날이 가장 앞서고 만약 같다면 일정이 제일 긴 pair들 순으로 정렬해줍니다. 📔 풀이과정 직사각형을 만드는 조건은 연속된 일정이 width 즉, 너비가 되고 겹치는 날의 개수가 height 즉, 높이가 되며 다음 일정이 비어있다면 widt..
(C++) - 프로그래머스(2018 KAKAO BLIND RECRUITMENT[3차]) : 파일명 정렬 https://programmers.co.kr/learn/courses/30/lessons/17686 코딩테스트 연습 - [3차] 파일명 정렬 파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램 programmers.co.kr 문자열 파싱 후 정렬하는 문제였습니다. 풀이방법 stl sort함수는 unstable quick sort입니다. 따라서 정해진 기준 외에 놔둬야 하는 문자열들의 서순이 뒤바뀔 수 있습니다. 때문에 stable_sort함수를 사용해 기준이 없는 문자열의 서순을 바꾸지 않도록 한다면 맞을 수 있습니다. 1. Head, Number를 문자열 파싱으로 구합니..
(C++) - 백준(BOJ) 11497번 : 통나무 건너뛰기 www.acmicpc.net/problem/11497 11497번: 통나무 건너뛰기 남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이 www.acmicpc.net 정렬문제였습니다. 풀이방법 인접한 높이 차이가 최소가 되려면 가장 높이가 높은 통나무 양 옆으로 작은 통나무가 배치되어야 합니다. 또한 이를 직접 배치하지 않고서 알 수 있는 방법은 정렬 후 한 칸 더 건너뛰어 2칸 떨어진 통나무끼리의 높이 차이들 중 최대를 구하면 이는 곳 난이도가 됩니다. Code #include using namespace std; int t; int main(){ cin >> t; wh..
(C++) - 백준(BOJ) 1431번 : 시리얼 번호 답 www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루 www.acmicpc.net 정렬 문제였습니다. 풀이방법 stl의 sort함수는 정렬기준을 커스터마이징한 함수를 넣어 원하는 대로 정렬할 수 있습니다. Code #include using namespace std; int n; vector serial; bool cmp(string a, string b){ if(a.size() == b.size()){ int sumA = 0,sumB = 0; for(int i = 0; i < a...
(C++) - 백준(BOJ) 10825번 : 국영수 답 www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 정렬 문제였습니다. 풀이방법 stl에서 sort함수를 사용할 때 정렬 기준을 커스터마이징할 수 있습니다. Code #include using namespace std; int n; struct Student { string name; int korean, english, math; }; vector v; bool cmp(Student &a, Student &b){ if(a.korean ==..
(C++) - 백준(BOJ) 1744번 : 수 묶기 www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 정렬문제였습니다. 풀이방법 1. 곱이 가장 크도록 묶는 방법을 생각해야 합니다. 2. n만큼 정수를 입력받을 때 음수와 양수를 따로 vector에 저장해줍니다. 양수는 0을 포함하면 안됩니다. 왜냐하면 음수에서 -1이라는 수와 0이 남은 경우 0과 곱해서 음수가 더해지는 것을 막을 수 있기 때문입니다. 반대로 양수배열에서 0을 곱해서 얻을 수 있는 이익이 없습니다. 따라서 0이 들어온다면 음수 vector에 ..