문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 풀이 방금 전에 작성한 글인 삽입 정렬을 구현해 풀어보았다. 아마도 파이썬에 내장되어 있는 정렬로 풀어도 풀릴 것이라 생각하지만 연습 삼아서. 파이썬으로 구현한 삽입정렬은 아래 링크에 있다. https://gnidinger.tistory.com/804 [Algorithm]파이썬으로 삽입정렬 구현하기 Insert Sort 삽입 정렬(Insert Sort)..
문제 수직선 위에 N개의 좌표 X1, X2,..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2,..., X'N를 출력해 보자. 입력 첫째 줄에 N이 주어진다. 둘째 줄에는 공백 한 칸으로 구분된 X1, X2,..., XN이 주어진다. 출력 첫째 줄에 X'1, X'2,..., X'N을 공백 한 칸으로 구분해서 출력한다. 풀이 문제만 읽어선 무슨 소린지 잘 와닿지 않으니까 예제의 입출력을 하나 살펴보자. 그러니까 주어진 숫자를 0부터 (중복을 제거한) 수의 개수 - 1까지 압축하라는 뜻이다. 위의 예를 이용하면 중복을 제거..
문제 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 온라인 저지 회원의 수 N이 주어진다(1 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다. 출력 첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다. 풀이 ..
문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i 번 점의 위치 xi와 yi가 주어진다(-100,000 ≤ xi, yi ≤ 100,000). 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. 출력 첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다. 풀이 직전 문제랑 정렬 순서만 바뀐 거라서 딱히 언급할 거리는 없다. 컬렉션 프레임워크의 정렬을 자유자재로 쓸 수 있도록 연습하는데 의의를. import java.util.ArrayList; import java.util.List; imp..
문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 풀이 문제 소개에 있듯이, 아슬아슬하게 내장 정렬함수로 정렬이 가능하다. 대신 가능한 시간을 줄이기 위해 BufferedReader/BufferedWriter를 사용해야 했다. import java.io.*; import java.util.ArrayList; import java.util.Collections; import java.uti..
으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]버블 정렬(Bubble Sort) [Java+Python]선택 정렬(Selection Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) 카운팅 정렬은 말 그대로 세어서 정렬하는 방식이다. 그래서 무엇을 세느냐 하면, 아래에서 보겠지만 정렬 대상이 대는 원소의 등장 횟수를 전부 센다. 이후 원소의 최댓값에 따라 누적합을 보유한 배열을 만든 뒤, 그 배열의 원소를 근거로 대상 배열을 정렬하는 식이다. 카운팅 정렬의 시간 복잡도는 O(N + k)로, 여기서 k는 타깃이 되는 배열 원소의..
문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 풀이 자바 7 이후의 스트림 sorted() 메서드는 다음과 같이 동작한다. 기본형 자료타입 - 병합 정렬(Merge sort - O(N logN) + 안정 정렬) 그 외 - 팀 정렬(Tim Sort - 병합, 삽입 정렬 하이브리드 + 불안정 정렬) 정렬에 관해서는 따로 글을 파고 있으니까 넘어가고, 여기서 하고 싶은 말은 (당연하게도)성능이 굉장히 빠..
으로 구현한 다른 정렬: [Java+Python]버블 정렬(Bubble Sort) [Java+Python]선택 정렬(Selection Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 삽입 정렬(Insert Sort)은 한 마디로 말하면 모든 요소를 정렬이 완료된 부분과 비교하여 자리를 찾아 삽입하는 알고리즘이다. 실생활에서 문제가 주어졌을 때 무의식적으로 가장 먼저 사용하는 알고리즘이며, 이 덕분에 가장 직관적이고 간결하다. 선택 정렬이나 거품 정렬 같은 알고리즘에 비해 빠른 편이며, 최선의 경우 거품 정렬과 함께 최고의..
자바에서 정렬을 하려면 Arrays 클래스가 import 되어야 한다. import java.util.Arrays; 오름차순 정렬의 경우 문자열이나 정수형이나 같은 방법을 이용한다. int[] arr = {3, 7, 4, 1, 0, 6}; String[] arr2 = {"AD", "GA", "ET", "BX", "GY"}; Arrays.sort(arr); Arrays.sort(arr2); System.out.println(Arrays.toString(arr)); System.out.println(Arrays.toString(arr2)); // 출력 결과 [0, 1, 3, 4, 6, 7] [AD, BX, ET, GA, GY] 내림차순 정렬의 경우엔 문자열과 정수형의 방법이 다르다. 정수형의 경우 Integ..
- Total
- Today
- Yesterday
- 면접 준비
- 자바
- 세계여행
- 맛집
- java
- 세계일주
- Python
- Backjoon
- a6000
- 동적계획법
- 남미
- 리스트
- 지지
- 야경
- 기술면접
- BOJ
- 스프링
- 파이썬
- 중남미
- Algorithm
- 알고리즘
- 유럽여행
- 칼이사
- 세모
- 여행
- spring
- 유럽
- RX100M5
- 스트림
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |