SWLUG(2025)/Algorithm

[SV 6주차] 새, 초콜릿 자르기, 직사각형에서 탈출

batterygj 2025. 8. 12. 16:19

문제

N마리의 새가 나무에 앉아있고, 자연수를 배우기 원한다. 새들은 1부터 모든 자연수를 오름차순으로 노래한다. 어떤 숫자 K를 노래할 때, K마리의 새가 나무에서 하늘을 향해 날아간다. 만약, 현재 나무에 앉아있는 새의 수가 지금 불러야 하는 수 보다 작을 때는, 1부터 게임을 다시 시작한다.

나무에 앉아 있는 새의 수 N이 주어질 때, 하나의 수를 노래하는데 1초가 걸린다고 하면, 모든 새가 날아가기까지 총 몇 초가 걸리는지 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 새의 수 N이 주어진다. 이 값은 10^9보다 작거나 같은 자연수이다.

 

 

N = int(input())
K = 1
time = 0

while N > 0:
    if N >= K:
        N -= K
        K += 1
        time += 1
    else:
        K = 1
print(time)

 

 

1. N의 값은 입력 받은 것의 정수값으로, K의 초기값은 1로, time의 초기값은 0으로 각각 지정한다.

2. N>0을 만족하는 동안 계속 반복한다.

3. N이 K보다 크거나 같으면 K마리는 날아가고 N-K마리가 남는다. 시간은 1초씩 늘어난다. 그 후 K+1마리가 날아가고 1초 늘어난다.

4. N이 K보다 작으면 새가 날아갈 수 없고 K=1부터 다시 시작한다. ( 이때, 시간도 그대로인 것 주의!)

5. 반복을 끝내면 time을 출력한다.

 


 

문제

정화는 N×M 크기의 초콜릿을 하나 가지고 있다. 초콜릿은 금이 가 있는 모양을 하고 있으며, 그 금에 의해 N×M개의 조각으로 나눠질 수 있다.

초콜릿의 크기가 너무 크다고 생각한 그녀는 초콜릿을 친구들과 나눠 먹기로 했다. 이를 위해서 정화는 초콜릿을 계속 쪼개서 총 N×M개의 조각으로 쪼개려고 한다. 초콜릿을 쪼갤 때에는 초콜릿 조각을 하나 들고, 적당한 위치에서 초콜릿을 쪼갠다. 초콜릿을 쪼갤 때에는 금이 가 있는 위치에서만 쪼갤 수 있다. 이와 같이 초콜릿을 쪼개면 초콜릿은 두 개의 조각으로 나눠지게 된다. 이제 다시 이 중에서 초콜릿 조각을 하나 들고, 쪼개는 과정을 반복하면 된다.

초콜릿을 쪼개다보면 초콜릿이 녹을 수 있기 때문에, 정화는 가급적이면 초콜릿을 쪼개는 횟수를 최소로 하려 한다. 초콜릿의 크기가 주어졌을 때, 이를 1×1 크기의 초콜릿으로 쪼개기 위한 최소 쪼개기 횟수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 두 정수 N, M(1 ≤ N, M ≤ 300)이 주어진다.

 

 

N, M = map(int, input().split())
print(N * M - 1)

 

1. 한줄의 문자열을 입력받는다. input() 

2. 입력 받은 문자열을 공백 기준으로 나누어서 리스트로 만든다.   .split()

3. 리스트에 있는 문자열들을 각각 정수로 변환한다.  map(int, ...)

4. 각각을 변수 N,M에 저장한다.

5. 한번 쪼갤 때 조각이 1개씩 증가하므로 최소 쪼개기 횟수는 조각수인 N*M보다 1이 작다. 따라서 N * M - 1 값을 출력한다.

 

 


 

문제

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 x, y, w, h가 주어진다.

 

x, y, w, h = map(int, input().split())
print(min(x, y, w - x, h - y))

 

1. 한줄의 문자열을 입력 받는다.

2. 입력 받은 문자열을 공백 기준으로 나누어서 리스트로 만든다. 

3. 리스트에 있는 문자열들을 각각 정수로 변환한다.

4.각각의 값을 변수 x, y, w, h에 차례로 저장한다.

5. 직사각형의 경계선까지 가는 거리의 최솟값은 x, y, w - x, h - y 중에 있다. 이 중 최솟값을 출력하게 한다.