Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- secant
- bisection
- Perceptron Convergence theorem
- directed graphical model
- SCPC
- 선형분류
- 로지스틱 회귀
- graphical models
- chapter01
- 자바ORM표준JPA프로그래밍
- vector미분
- MySQL
- 1차예선
- 5397번
- 이것이 MySQL이다
- 스터디
- 알고리즘
- CH01
- 알고리즘대회
- Fisher discriminant analysis
- 개발순서
- chapter02
- 2018
- 델타 rule
- 인공지능
- falsePosition
- Numerical optimization
- undirected graphical model
- 선형판별분석
- 근구하기
Archives
- Today
- Total
computer_study
[정렬] BAEKJOON ' 10814'번 '나이순 정렬 '문제 (C++/python) 본문
문제 : www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 �
www.acmicpc.net
-
문제 해결 아이디어
1. 각 언어의 sort stl의 특성을 이용한다.
-
python
python에선 sort함수로, list를 특정 인자로 정렬을 한다고 지정 시, 나머지 인자들은 원래 list 순서대로 유지한다는 특징을 이용한다.
ex) (2,4),(2,3),(1,5) 를 첫번째 인자를 기준으로 정렬한다면 (1,5),(2,4),(2,3)이 된다.
n = int(input())
array = []
for _ in range(n):
input_data = input().split(' ')
array.append(int(input_data[0]),input_data[1])
array = sorted(array, key=lambda x: x[0]) # 나이순으로 정렬되도록 key값 설
# 이후 나머지 원소에 대해서 stable하다.(원래 list의 순서를 최대한 유지한다.)->python 정렬 library의 특성
for i in array:
print(i[0], i[1])
# python 정렬
# sort() 함수를 이용해서 list를 바로 정렬
# ex) list.sort()
# sorted() 함수에 list를 매개변수로 넣어서 정렬, 이후 정렬된 결과를 반환한다.
# ex) sorted(list)
-
c++
vector를 sort함수로 정렬 시. 앞부분부터 차례로 정렬하는 특성을 이용한다.
ex) (2,4),(2,3),(1,5) 를 sort함수로 정렬할 시, (1,5)(2,3)(2,4)가 된다.
이는 python에서, "특정 인자로 정렬"을 지정하지 않을 시 같은 특성을 갖는다.(아래 11650문제)
#include "iostream"
#include "string"
#include "vector"
#include "algorithm"
using namespace std;
int main(){
int num_of_member,index=0;
vector<pair<pair<int,int>,string>> v;
scanf("%d",&num_of_member);
for(int i=0 ; i< num_of_member ; i++){
char name_tmp[100];
int age;
scanf("%d",&age);
scanf("%s",name_tmp);
v.push_back(make_pair(make_pair(age, index),name_tmp));
index++;
}
sort(v.begin(), v.end());
for(int i=0 ; i< num_of_member ; i++){
printf("%d %s\n",v[i].first.first, v[i].second.c_str());
}
return 0;
}
같은 맥락의 문제로 '좌표 정렬하기'가 있다.
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
-
python
n = int(input())
array = []
for _ in range(n):
x, y = map(int, input().split(' '))
array.append(((x,y)))
array = sorted(array) # key값 없이 정렬하면 자동으로 앞에서부터 정렬
for i in array:
print(i[0], i[1])
-
c++
#include "iostream"
#include "vector"
#include "algorithm"
using namespace std;
int main(){
int num_of_points;
vector<pair<int,int>> v;
scanf("%d",&num_of_points);
for(int i=0 ; i< num_of_points ; i++){
int a,b;
scanf("%d%d",&a,&b);
v.push_back(make_pair(a,b));
}
sort(v.begin(), v.end());
for(int i=0 ; i< num_of_points ; i++){
printf("%d %d\n",v[i].first,v[i].second);
}
return 0;
}
'알고리즘 > 문제풀이' 카테고리의 다른 글
[재귀함수/DP] BAEKJOON '2747'번 '피보나치 수 '문제 (C++/python) (0) | 2020.08.07 |
---|---|
[정렬/counting sort] BAEKJOON ' 10989'번 '수 정렬하기3 '문제 (C++/python) (0) | 2020.08.07 |
[정렬] BAEKJOON ' 2750'번, '1427'번 (C++/python) (0) | 2020.08.06 |
[해시/union-find 알고리즘] BAEKJOON ' 4195'번 '친구 네트워크 '문제 (C++/python) (0) | 2020.08.05 |
[해시/배열] BAEKJOON 1920번 '수 찾기'문제 (C++/python) (0) | 2020.08.03 |
Comments