2751, 1427, 1026, 1764, 11004(백준)

김태성·2021년 11월 18일

문제 2751

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

기본 정렬문제이므로 파이썬 라이브러리 함수를 통해 해결했습니다

import sys
input = sys.stdin.readline

N = int(input())
N_list = [ int(input()) for _ in range(N) ]

for _ in sorted(N_list):
    print(_)

문제 1427

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자.

입력
첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

출력
첫째 줄에 자리수를 내림차순으로 정렬한 수를 출력한다.

파이썬 라이브러리 함수는 정말 편한 것 같다

import sys
input = sys.stdin.readline

input_list = sorted(list(map(int,input().strip())),reverse=True)

for _ in input_list:
    print(_,sep='',end='')

문제 1026

옛날 옛적에 수학이 항상 큰 골칫거리였던 나라가 있었다. 이 나라의 국왕 김지민은 다음과 같은 문제를 내고 큰 상금을 걸었다.

길이가 N인 정수 배열 A와 B가 있다. 다음과 같이 함수 S를 정의하자.

S = A[0] × B[0] + ... + A[N-1] × B[N-1]

S의 값을 가장 작게 만들기 위해 A의 수를 재배열하자. 단, B에 있는 수는 재배열하면 안 된다.

S의 최솟값을 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다.

출력
첫째 줄에 S의 최솟값을 출력한다.

  • A는 가능하지만 B는 재 배열하면 안된다
  • 정렬된 A의 처음 값과 B의 최대값을 pop해주며 곱한 후 결과에 더해 주었다
import sys
input = sys.stdin.readline

N = int(input())
A = sorted(list( map(int, input().split())))
B = list( map(int, input().split()))
result = 0

for _ in range(N):
    max_idx = B.index(max(B))
    result += A[_]*B.pop(max_idx)
print(result)

문제 1764 듣보잡

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력
첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

출력
듣보잡의 수와 그 명단을 사전순으로 출력한다.

  • 로직은 굉장히 쉬운 문제이지만, 시간초과를 해결하는 것이 목적인 문제인 것 같다
  • 처음에 if in 조건문을 통해서 중복되는 개수와 문자열을 구하여 풀었지만 시간초과가 났다
import sys
input = sys.stdin.readline

N, M = map(int, input().split())
N_list = [ input() for _ in range(N) ]
M_list = [ input() for _ in range(M) ]

result = set(N_list) & set(M_list)

print(len(result))
for _ in sorted(result):
    print(_,end='')

문제 11004

수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.

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

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

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

ㅋㅋ.. 중딩도 하겟다!

import sys
input = sys.stdin.readline

N, K = map(int, input().split())
N_list = sorted(list( map(int, input().split())))
print(N_list[K-1])
profile
@flip_404

0개의 댓글