728x90

CodeUp 1451 데이터 정렬(small)

문제

데이터 정렬은 프로그래밍 문제를 푸는데 많이 사용된다.

N개의 데이터가 입력되면, 오름차순된 결과를 출력하는 프로그램을 작성하시오.

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

입력

첫째줄에 N이 입력된다. (1<=N<=10,000)

다음 줄부터 N개의 데이터가 한 줄에 한 개씩 입력된다.

출력

오름차순 정렬한 결과를 한 줄에 하나씩 순서대로 출력한다.

입력 예시

5
7
3
10
2
1

출력 예시

1
2
3
7
10

풀이

import sys

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

for _ in range(0, n):
    number = int(input())
    nums.append(number)
    
nums.sort()

print(*nums)
728x90
728x90

CodeUp 1420 3등 찾기

문제

 민준이는 뒤늦게 정보 과목의 중요성을 깨닫고 학습실에서 공부를 하고 있다.

기본 공부가 너무 안 되어 있어 아주 쉬운 문제부터 어려움을 겪은 민준이는 친구에게 물어보려고 한다.

가장 잘 하는 친구에게 물어보기는 질문의 내용이 너무 부끄러워 n명의 친구들 중 정보 성적이 3번째로 높은 친구에게 묻고자 한다.

친구들의 성적은 모두 다르다.

n명의 친구들의 이름과 정보 성적이 주어졌을 때 성적이 세 번째로 높은 학생의 이름을 출력하시오.

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

입력

첫째 줄에 n이 입력된다. ( 3 <= n <= 50 )

둘째 줄 부터 n+1행까지 친구의 이름과 점수가 공백으로 분리되어 입력된다. 이름은 영문

출력

세 번째로 높은 학생의 이름을 출력한다.

입력 예시

5
minsu 78
gunho 64
sumin 84
jiwon 96
woosung 55

출력 예시

minsu

풀이

n = int(input())
record = {}

for _ in range(0, n):
    name, score = input().split()
    record[name] = int(score)

data = sorted(record.items(), key=lambda x: x[1], reverse=True)

print(data[2][0])
728x90
728x90

CodeUp 1172 세 수 정렬하기

문제

세 수를 오름차순으로 정렬하려고 한다. (낮은 숫자 -> 높은 숫자)

예)
5 8 2   ====> 2 5 8    로 출력

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

입력

세 정수가 입력된다.

출력

낮은 숫자 부터 출력한다.

입력 예시

8 7 6

출력 예시

6 7 8

도움말

숫자가 같을 때도 생각하세요~

풀이

import sys

input = sys.stdin.readline
nums = list(map(int, input().split()))
nums.sort()

print(*nums, end=' ')
728x90
728x90

BOJ 2212 센서

문제

한국도로공사는 고속도로의 유비쿼터스화를 위해 고속도로 위에 N개의 센서를 설치하였다.

문제는 이 센서들이 수집한 자료들을 모으고 분석할 몇 개의 집중국을 세우는 일인데, 

예산상의 문제로, 고속도로 위에 최대 K개의 집중국을 세울 수 있다고 한다.

각 집중국은 센서의 수신 가능 영역을 조절할 수 있다.

집중국의 수신 가능 영역은 고속도로 상에서 연결된 구간으로 나타나게 된다.

N개의 센서가 적어도 하나의 집중국과는 통신이 가능해야 하며, 

집중국의 유지비 문제로 인해 각 집중국의 수신 가능 영역의 길이의 합을 최소화해야 한다.

편의를 위해 고속도로는 평면상의 직선이라고 가정하고, 

센서들은 이 직선 위의 한 기점인 원점으로부터의 정수 거리의 위치에 놓여 있다고 하자. 

따라서, 각 센서의 좌표는 정수 하나로 표현된다. 

이 상황에서 각 집중국의 수신 가능영역의 거리의 합의 최솟값을 구하는 프로그램을 작성하시오. 

단, 집중국의 수신 가능영역의 길이는 0 이상이며 모든 센서의 좌표가 다를 필요는 없다.

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

입력

첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 

셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 

각 좌표 사이에는 빈 칸이 하나 있으며, 좌표의 절댓값은 1,000,000 이하이다.

출력

첫째 줄에 문제에서 설명한 최대 K개의 집중국의 수신 가능 영역의 길이의 합의 최솟값을 출력한다.

예제 입력 1

6
2
1 6 9 3 6 7

예제 출력 1

5

예제 입력 2

10
5
20 3 14 6 7 8 18 10 12 15

예제 출력 2

7

풀이

import sys

input = sys.stdin.readline
n = int(input())
k = int(input())
sensor = list(map(int, input().split()))
sensor.sort()
arr = []

for i in range(0, n-1):
    arr.append(sensor[i+1] - sensor[i])

arr.sort()
print(sum(arr[:n-k]))
728x90
728x90

BOJ 2437 저울

문제

하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다.

이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다.

또한, 저울의 한쪽에는 저울추들만 놓을 수 있고, 다른 쪽에는 무게를 측정하려는 물건만 올려놓을 수 있다.

출처 - 백준 온라인 저지

무게가 양의 정수인 N개의 저울추가 주어질 때, 

이 추들을 사용하여 측정할 수 없는 양의 정수 무게 중 최솟값을 구하는 프로그램을 작성하시오.

예를 들어, 무게가 각각 3, 1, 6, 2, 7, 30, 1인 7개의 저울추가 주어졌을 때,

이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21이다.

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

입력

첫 째 줄에는 저울추의 개수를 나타내는 양의 정수 N이 주어진다.

N은 1 이상 1,000 이하이다. 

둘째 줄에는 저울추의 무게를 나타내는 N개의 양의 정수가 빈칸을 사이에 두고 주어진다. 

각 추의 무게는 1이상 1,000,000 이하이다.

출력

첫째 줄에 주어진 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 출력한다.

예제 입력 1

7
3 1 6 2 7 30 1

예제 출력 1

21

풀이

n=int(input())
weight=list(map(int, input().split()))
weight.sort()
res=1

for i in weight:
    if res < i:
        break
    res += i
print(res)
728x90
728x90

BOJ 1015 수열 정렬

문제

P[0], P[1], ...., P[N-1]은 0부터 N-1까지(포함)의 수를 한 번씩 포함하고 있는 수열이다. 

수열 P를 길이가 N인 배열 A에 적용하면 길이가 N인 배열 B가 된다. 

적용하는 방법은 B[P[i]] = A[i]이다.

배열 A가 주어졌을 때, 수열 P를 적용한 결과가 비내림차순이 되는 수열을 찾는 프로그램을 작성하시오. 

비내림차순이란, 각각의 원소가 바로 앞에 있는 원소보다 크거나 같을 경우를 말한다. 

만약 그러한 수열이 여러개라면 사전순으로 앞서는 것을 출력한다.

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

입력

첫째 줄에 배열 A의 크기 N이 주어진다.

둘째 줄에는 배열 A의 원소가 0번부터 차례대로 주어진다.

N은 50보다 작거나 같은 자연수이고, 배열의 원소는 1,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 비내림차순으로 만드는 수열 P를 출력한다.

예제 입력 1

3
2 3 1

예제 출력 1

1 2 0

예제 입력 2

4
2 1 3 1

예제 출력 2

2 0 3 1

예제 입력 3

8
4 1 6 1 3 6 1 4

예제 출력 3

4 0 6 1 3 7 2 5

풀이

n = int(input())
arr = list(map(int, input().split()))
sort_arr = sorted(arr)

res = []
for i in range(n):
    t = sort_arr.index(arr[i])
    res.append(t)
    sort_arr[t] = -1

print(*res)
728x90
728x90

BOJ 11508 2+1 세일

문제

KSG 편의점에서는 과일우유, 드링킹요구르트 등의 유제품을 '2+1 세일'하는 행사를 하고 있습니다. 

KSG 편의점에서 유제품 3개를 한 번에 산다면 그중에서 가장 싼 것은 무료로 지불하고 

나머지 두 개의 제품 가격만 지불하면 됩니다. 

한 번에 3개의 유제품을 사지 않는다면 할인 없이 정가를 지불해야 합니다.

예를 들어, 7개의 유제품이 있어서 각 제품의 가격이 10, 9, 4, 2, 6, 4, 3이고 

재현이가 (10, 3, 2), (4, 6, 4), (9)로 총 3번에 걸쳐서 물건을 산다면 첫 번째 꾸러미에서는 13원을,

두 번째 꾸러미에서는 10원을, 세 번째 꾸러미에서는 9원을 지불해야 합니다.

재현이는 KSG 편의점에서 친구들과 같이 먹을 총 N팩의 유제품을 구입하려고 합니다. 

재현이를 도와 최소비용으로 유제품을 구입할 수 있도록 도와주세요!

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

입력

첫 번째 줄에는 유제품의 수 N (1 ≤ N ≤ 100,000)이 주어집니다.

두 번째 줄부터 N개의 줄에는 각 유제품의 가격 Ci (1 ≤ Ci ≤ 100,000)가 주어집니다.

출력

재현이가 N개의 유제품을 모두 살 때 필요한 최소비용을 출력합니다. 정답은 231-1보다 작거나 같다.

예제 입력 1

4
3
2
3
2

예제 출력 1

8

예제 입력 2

6
6
4
5
5
5
5

예제 출력 2

21

풀이

import sys 

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

for i in range(n):
    arr.append(int(input()))

arr.sort(reverse = True)
res = 0

for i in range(n):
    if i % 3 != 2:
        res += arr[i]

print(res)
728x90
728x90

BOJ 25305 커트라인

문제

2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 $N$명의 학생들이 응시했다.

이들 중 점수가 가장 높은 $k$명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.

커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.

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

입력

첫째 줄에는 응시자의 수 N과 상을 받는 사람의 수 k가 공백을 사이에 두고 주어진다.

둘째 줄에는 각 학생의 점수 x가 공백을 사이에 두고 주어진다.

출력

상을 받는 커트라인을 출력하라.

제한

 1 ≤ N ≤ 1,000
 1 ≤ k ≤ N 
 0 ≤ x ≤ 10,000

예제 입력 1

5 2
100 76 85 93 98

예제 출력 1

98

풀이

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

x.sort(reverse= True)

print(x[k-1])
728x90

+ Recent posts