//
728x90
반응형

BOJ 11004 K번째 수

문제

수 N개 A1, A2, ..., AN이 주어진다. 

A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

시간 제한 : 2 초
메모리 제한 : 512 MB

입력

첫째 줄에 N(1 ≤ N ≤ 5,000,000)과 K (1 ≤ K ≤ N)이 주어진다.

둘째에는 A1, A2, ..., AN이 주어진다. (-109 ≤ Ai ≤ 109)

출력

A를 정렬했을 때, 앞에서부터 K번째 있는 수를 출력한다.

예제 입력 1

5 2
4 1 2 3 5

예제 출력 1

2

풀이

n, k = map(int, input().split())
a = list(map(int, input().split()))

a.sort()

print(a[k-1])
728x90
반응형
728x90
반응형

boj 11656 접미사 배열

문제

접미사 배열은 문자열 S의 모든 접미사를 사전순으로 정렬해 놓은 배열이다.

baekjoon의 접미사는 baekjoon, aekjoon, ekjoon, kjoon, joon, oon, on, n 으로 총 8가지가 있고, 

이를 사전순으로 정렬하면, aekjoon, baekjoon, ekjoon, joon, kjoon, n, on, oon이 된다.

문자열 S가 주어졌을 때, 모든 접미사를 사전순으로 정렬한 다음 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 문자열 S가 주어진다. 

S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

출력

첫째 줄부터 S의 접미사를 사전순으로 한 줄에 하나씩 출력한다.

예제 입력 1

baekjoon

예제 출력 1

aekjoon
baekjoon
ekjoon
joon
kjoon
n
on
oon

풀이

s = input()
arr = []

for i in range(len(s)):
    arr.append(s[i:])

arr.sort()

print("\n".join(arr))
728x90
반응형
728x90
반응형

BOJ 10825 국영수

문제

도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 

이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.

    1. 국어 점수가 감소하는 순서로
    2. 국어 점수가 같으면 영어 점수가 증가하는 순서로
    3. 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
    4. 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 
       (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
       
시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다.

둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다.

점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.

이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.

출력

문제에 나와있는 정렬 기준으로 정렬한 후 첫째 줄부터 N개의 줄에 걸쳐 각 학생의 이름을 출력한다.

예제 입력 1

12
Junkyu 50 60 100
Sangkeun 80 60 50
Sunyoung 80 70 100
Soong 50 60 90
Haebin 50 60 100
Kangsoo 60 80 100
Donghyuk 80 60 100
Sei 70 70 70
Wonseob 70 70 90
Sanghyun 70 70 80
nsj 80 80 80
Taewhan 50 60 90

예제 출력 1

Donghyuk
Sangkeun
Sunyoung
nsj
Wonseob
Sanghyun
Sei
Kangsoo
Haebin
Junkyu
Soong
Taewhan

풀이

import sys

input = sys.stdin.readline
n = int(input())
arr = []

for _ in range(n) :
    arr.append(input().split())

arr.sort(key = lambda x : (-int(x[1]), int(x[2]), -int(x[3]), x[0]))

for i in arr :
    print(i[0])
728x90
반응형
728x90
반응형

BOJ 2752 세수정렬

문제

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

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

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

시간 제한 : 1 초
메모리 제한 : 128 MB

입력

숫자 세 개가 주어진다. 

이 숫자는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 

이 숫자는 모두 다르다.

출력

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

예제 입력 1

3 1 2

예제 출력 1

1 2 3

풀이

arr = list(map(int, input().split()))
arr.sort()

for i in arr :
    print(i, end=" ")
728x90
반응형
728x90
반응형

BOJ 18870 좌표 압축

문제

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.

X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.

시간 제한 : 2 초
메모리 제한 : 512 MB

입력

첫째 줄에 N이 주어진다.

둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.

출력

첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.

제한

1 ≤ N ≤ 1,000,000
-109 ≤ Xi ≤ 109

예제 입력 1

5
2 4 -10 4 -9

예제 출력 1

2 3 0 3 1

예제 입력 2

6
1000 999 1000 999 1000 999

예제 출력 2

1 0 1 0 1 0

풀이

import sys

input = sys.stdin.readline
n = int(input())
x_list = list(map(int, input().split()))
set_x = list(sorted(set(x_list)))

dic = {set_x[i]: i for i in range(len(set_x))}

for j in x_list:
    print(dic[j], end = ' ')

이전 풀이(시간 초과)

# 간단하게 생각해서 index를 활용했지만 시간초과가 나왔다.
# 그로인해 위의 풀이과정으로 변경

import sys

input = sys.stdin.readline
n = int(input())
x_list = list(map(int, input().split()))
set_x = list(sorted(set(x_list)))

for i in x_list:
    print(set_x.index(i), end = ' ')

 

728x90
반응형
728x90
반응형

BOJ 10814 나이순 정렬

문제

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 

이때, 회원들을 나이가 증가하는 순으로, 

나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.

시간 제한 : 3 초
메모리 제한 : 256 MB

입력

첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 

나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 

길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.

출력

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 

나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

예제 입력 1

3
21 Junkyu
21 Dohyun
20 Sunyoung

예제 출력 1

20 Sunyoung
21 Junkyu
21 Dohyun

풀이

import sys

input = sys.stdin.readline
n = int(input())
arr = []
for _ in range(n) :
    arr.append(list(input().split()))

arr.sort(key = lambda x : int(x[0]))

for i in arr :
    print(i[0], i[1])
728x90
반응형
728x90
반응형

BOJ 11651 좌표 정렬하기 2

문제

2차원 평면 위의 점 N개가 주어진다. 

좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 

둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. 

(-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

입력 예시 1

5
0 4
1 2
1 -1
2 2
3 3

출력 예시 1

1 -1
1 2
2 2
3 3
0 4

풀이

n = int(input())
arr = []

for _ in range(n) :
    arr.append(list(map(int, input().split())))

arr.sort(key= lambda xy : (xy[1], xy[0]))

for i in arr :
    print(i[0], i[1])
728x90
반응형
728x90
반응형

BOJ 11650 좌표 정렬하기

문제

2차원 평면 위의 점 N개가 주어진다. 

좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

시간 제한 : 1 초
메모리 제한 : 256 MB

입력

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 

둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. 

(-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

출력

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

예제 입력 1

5
3 4
1 1
1 -1
2 2
3 3

예제 출력 1

1 -1
1 1
2 2
3 3
3 4

풀이

import sys

input = sys.stdin.readline
n = int(input())
arr = []
for _ in range(n) :
    arr.append(list(map(int, input().split())))

arr.sort(key = lambda xy : (xy[0], xy[1]))

for i in arr :
    print(i[0],i[1])
728x90
반응형

+ Recent posts