2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
(2) 입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
(3) 출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
(4) 예제 입력 및 출력
(5) 코드
length = int(input())
point_list = []
for i in range(0,length):
x,y = input().split()
point_list.append([int(x),int(y)])
point_list.sort(key=lambda x: (x[1], x[0]))
for i in range(0, len(point_list)):
print(point_list[i][0], point_list[i][1])
첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.
(3) 출력
한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.
(4) 예제 입력 및 출력
(5) 코드
import math
#변수를 입력받는 방법
min,max = input().split()
min_number = int(min)
max_number = int(max)
prime = []
for i in range(min_number, max_number + 1):
prime_check = True
for j in range(2, int(math.sqrt(i + 1)) + 1):
if i % j == 0:
prime_check = False
break
if prime_check:
prime.append(i)
if min_number == 1:
prime.remove(1)
for i in range(0, len(prime)):
print(prime[i])
ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다.
문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든 인접한 두 방 사이의 거리는 같은 거리(거리 1)라고 가정하고 호텔의 정면 쪽에만 방이 있다고 가정한다.
그림 1. H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림
방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.
손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다.
여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다. 그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.
(2) 입력
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수를 포함하고 있으며 각각 호텔의 층 수, 각 층의 방 수, 몇 번째 손님인지를 나타낸다(1 ≤ H, W ≤ 99, 1 ≤ N ≤ H × W).
(3) 출력
프로그램은 표준 출력에 출력한다. 각 테스트 데이터마다 정확히 한 행을 출력하는데, 내용은 N 번째 손님에게 배정되어야 하는 방 번호를 출력한다.
(4) 예제 입력 및 출력
(5) 코드
import math
#변수를 입력받는 방법
length = int(input())
hotels = []
for i in range(0,length):
H,W,N = input().split()
hotels.append([H,W,N])
for i in range(0,len(hotels)):
hotel_H = int(hotels[i][0])
hotel_X = int(hotels[i][1])
client_count = int(hotels[i][2])
client_x = int(client_count / hotel_H)
client_y = hotel_H
if client_count % hotel_H != 0:
client_x += 1
client_y = client_count % hotel_H
if len(str(client_x)) == 1:
client_x = '0' + str(client_x)
print(str(client_y) + str(client_x))
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
크로아티아 알파벳변경
č
c=
ć
c-
dž
dz=
đ
d-
lj
lj
nj
nj
š
s=
ž
z=
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
(2) 입력
첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.
단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.
(3) 출력
입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
(4) 예제 입력 및 출력
(5) 코드
#변수를 입력받는 방법
text = input()
text_length = len(text)
exception_text = ['c=','c-','dz=','d-','lj','nj','s=','z=']
for i in range(0, len(exception_text)):
text = text.replace(exception_text[i],"0")
print(len(text))
n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.
생성자가 없는 숫자를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97
10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
(2) 입력
입력은 없다.
(3) 출력
10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.
(4) 예제 입력 및 출력
(5) 코드
constructor = []
full_list = []
for i in (range(0,10001)):
full_list.append(i)
for int_num in (range(0, 10001)):
str_num = str(int_num)
for i in (range(0, len(str_num))):
int_num += int(str_num[i])
str_num = str(int_num)
constructor.append(int_num)
complement = list(set(full_list) - set(constructor))
complement.sort()
for i in range(0, len(complement)):
print(complement[i])
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
(2) 입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
(3) 출력
첫째 줄에 N의 사이클 길이를 출력한다.
(4) 예제 입력 및 출력
(5) 코드
#변수를 입력받는 방법
num = input()
count = 0
str_num = str(num)
init_num = str(num)
num_temp = ''
while True:
if len(str_num) == 1:
str_num = str(0) + str_num
num_temp = int(str_num[0]) + int(str_num[1])
if len(str(num_temp)) == 1:
num_temp = str(0) + str(num_temp)
str_num = str_num[1] + str(num_temp)[1]
count += 1
if int(init_num) == int(str_num):
print(count)
break