2023. 8. 2. 19:01ㆍ자료구조 및 알고리즘/백준
[백준] 10814번: 나이순 정렬 (C++) - 삽질과 stable sort
백준 10814번 : 나이순 정렬 링크
https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
코드 개형
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
/*숫자를 포함하는 문자열 배열 생성*/
/*공백으로 구분하기 Skill*/
for (int i = 0; i < N; i++)
{
}
}
내 코드로 구현해보고 여러 출력 방식을 보자.
공백으로 구분해서 받는 방법하면 cin 입력 받기가 생각난다.
그리고 숫자, 문자열 쌍을 받는다 하면 tuple이었나 그러한 거는 BFS 참고바람.
pair example이다... tuple이 아니라ㅋㅋㅋㅋㅋ
https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x09/pair_example.cpp
그리고 C++에서 1차원 배열 선언 방법은
int board[100];
해주고 중괄호 {}를 이용해주거나... 하면 됩니다.
그래서 배열과 pair가 섞인 형태의 배열은? 다음 게시글 참고하세요!
https://rbehd001.tistory.com/9
[2] Pair 배열(array)
기존에 2개이상의 수(int 등)을 포함하는 배열을 활용하면 참 좋겠다 했는데 Pair 클래스, 즉 2개이상의 숫자를 담을 수 있는 배열을 선언할 수 있다는 것을 이제알았다...!!!!!!!배열느낌으로 항상 qu
rbehd001.tistory.com
아래 코드 쳐보니까 왜 갑자기 종료됨?
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void)
{
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
/*숫자를 포함하는 문자열 배열 생성*/
/*공백으로 구분하기 Skill*/
pair<int, string> array[100001]; // N은 100,000이 최대
for (int i = 0; i < N; i++)
{/* 나이 이름 입력 받기 */
cin >> array[i].first >> array[i].second;
}
cout << "we print members";
for (int i = 0; i < N; i++)
{/* 나이 이름 출력*/
cout<< array[i].first << array[i].second;
}
return 0;
}
왜그러지?
그리고 혹시나 해서 string만 쓰려고, string 배열 100000 했는데
이상해
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(void)
{
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
/*숫자를 포함하는 문자열 배열 생성*/
/*공백으로 구분하기 Skill*/
string info[100000];
for (int i = 0; i < N; i++)
{
cin >> info[i];
//버퍼 비우기
}
//sort(info, info + 100000);
cout << "we print ====>";
for (int i = 0; i < N; i++)
{
cout << info[i];
}
return 0;
}
내 구현력이 너무 딸려?! 아님 라이브러리 문제?
cstring 라이브러리 추가해보고 보자. => 그래도 문제다.
구현하는 거 때문에 꽤 헤매다가, 다른 사람 블로그 참고.
이 분은 stable sort를 사용했는데 vector 등등 배울 것이 많다. iterator도 배워야 되잖어....
https://cryptosalamander.tistory.com/52
[백준 / BOJ] - 10814번 나이순 정렬 C++ 풀이
백준 - 단계별로 풀어보기 [10814] https://www.acmicpc.net/problem/10814 문제 풀이 원래의 순서를 손상시키지 않으면서 정렬하는것을 stable sort라고 한다. 본 문제는 C++의 sort처럼 algorithm 헤더에 들어있는 st
cryptosalamander.tistory.com
그래서 stable sort 사용한 분 코드는
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<int,string> a, pair<int,string> b)
{
return a.first < b.first;
}
int main() {
int num;
cin >> num;
pair<int,string> tmp;
vector<pair<int,string>> arr; //pair형을 담고 있는 vector
for(int i = 0; i < num; i++)
{
cin >> tmp.first >> tmp.second;
arr.push_back(tmp);
}
stable_sort(arr.begin(),arr.end(),compare);
for(int i = 0; i < num; i++)
cout << arr[i].first << ' ' << arr[i].second << '\n';
}
[백준] 10814 나이순 정렬 C++ (정렬)
📌 백준 10814 나이순 정렬https://www.acmicpc.net/problem/10814이 문제는 두 가지 방법으로 풀었다. 계속 틀렸습니다가 나왔고 내가 무슨 부분을 놓치고 있는지 잘 모르겠더라. 그래서 고민 끝에 질문 게
velog.io
https://baehoon.tistory.com/16
[백준] 10814번: 나이순 정렬 [C++]
알고리즘 분류: 정렬 문제 링크: https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순
baehoon.tistory.com
baehoon님의 tistory에 더 잘 설명되어 있어서
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
bool comp(pair<int, string>a, pair<int, string>b)
// 이는 사용자 정의 정렬 기준이다. 첫번째 원소인 소문자.first를 기준으로 오름차순.
{
return a.first < b.first;
}
int main(void)
{
int n;
cin >> n;
pair<int, string>mem_cop;
vector<pair<int, string>>mem;
for (int i = 0; i < n; i++)
{
cin >> mem_cop.first >> mem_cop.second;
mem.push_back(mem_cop);
}
stable_sort(mem.begin(), mem.end(), comp);
for (int i = 0; i < mem.size(); i++)
cout << mem.at(i).first << ' ' << mem.at(i).second << '\n';
return 0;
}
그래서 stable sort는 무엇인가...?
다음 글을 참고해보자.
https://code-lab1.tistory.com/24
[알고리즘] 기본 정렬 알고리즘 비교| stable vs not stable| in-place vs not in-place | 선택 정렬(selection sort)
정렬 알고리즘이란? 정렬 알고리즘은 n개의 숫자가 주어졌을 때 이를 사용자가 지정한 기준에 맞게 정렬하는 알고리즘이다. 아주 간단한 알고리즘부터 조금 복잡한 알고리즘까지, 여러가지 알
code-lab1.tistory.com
stable vs not stable
stable 정렬은 중복된 키 값이 있을 때 이를 순서대로 정렬하는 알고리즘을 뜻한다.
예를 들어, int arr[5] = { 7, 3, 6, 2, 3 } 과 같이 3값이 두 번 들어 있는 배열이 있다고 하자.
이것을 어떠한 정렬 알고리즘으로 정렬 했을 때 중복 된 키 값이 처음 순서대로 정렬 되었다면 stable sort 라고 한다.
반대로 어떠한 정렬 알고리즘으로 정렬 했을 때 중복 된 키 값이 처음 순서와 다르다면 not-stable sort 라고 한다.
이해가 가지 않는 다면 다음 그림을 보자.
정렬 전에는 주황색으로 표시한 3이 초록색으로 표시한 3보다 앞에 있다. 이 배열을 오름차순으로 정렬하면
Stable Sort : 정렬 전 처럼 주황색 3이 초록색 3보다 앞에 있음
Not Stable Sort : 정렬 전과 다르게 주황색 3이 초록색 3보다 뒤에 있음
사실, 이 문제는 공부를 더 하고 풀었어야 하는 부분이다...
정렬 더 공부하고, vector, iterator, pair 활용, 부르트포스, dx dy 공부하고.... 2단계 쭉 돌려볼까 한다.
오랜만에 백준 문제 푼다고 참고한 부분) https://dbstndi6316.tistory.com/33
[개념정리] C/C++ 여러 input방법에 대해
삼성 역량테스트를 C++로 준비하며 필요한 input의 방법들을 공부하며 정리해봤다. 1. 길이를 알고있는 숫자를 입력하고 이를 한글자씩 잘라서 input을 받아야 하는 상황 ex) 입력 : 길이 7의 숫자 1234
dbstndi6316.tistory.com
그리고 공백 자르는 부분
https://chbuljumeok1997.tistory.com/42
코테용- c++ split 함수 (string 나누기/string 잘라서 배열에 넣기)
코테를 c++로 하면서 느낀점은..속도를 제외하고 c++의 좋은점을 아직 잘 모르겠다는 점이다.. 항상 코딩테스트를 보면 string을 잘라야하는 순간이 생기는데 그럴때마다 자바로 갈아타고 싶다.. 이
chbuljumeok1997.tistory.com
코테 문자열 관련 스킬
https://mintuchel.tistory.com/entry/C-%EB%AC%B8%EC%9E%90%EC%97%B4-string
[C++] 문자열 관련 모든 것 (추가ing)
C++에서는 C와 달리 문자열을 객체로써 쓸 수 있다 ( string ) #include 해당 객체를 사용하기 위해서는 위 헤더파일을 선언해야한다 그리고 string 관련된 함수는 모두 저 헤더파일에 있다 [ STRING 클래
mintuchel.tistory.com
이런 거는 코딩테스트 스킬 부분 카테고리를 만들어서 저장해두자!
그리고 코드 출처는 내 머리 속과 위에 있는 링크들 참조
'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글
[백준] 2798번 블랙잭 (0) | 2023.08.03 |
---|---|
[백준] 10989번: 수 정렬하기 3 - 메모리 초과 문제 해결 (0) | 2023.08.02 |
[백준] 1629번 곱셈 C++ (1) | 2023.07.09 |
[백준 C++] 1012번 유기농 배추 (0) | 2023.07.03 |
[백준 1182] 부분수열의 합 (0) | 2023.04.06 |