[Python-Baekjoon] ๊ธฐ๋ณธ ์ˆ˜ํ•™ 1

Beanxxยท2021๋…„ 8์›” 17์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
8/10
post-thumbnail

๋ฐฑ์ค€-๋‹จ๊ณ„๋ณ„๋กœ ํ’€์–ด๋ณด๊ธฐ-'๊ธฐ๋ณธ ์ˆ˜ํ•™ 1' ํŒŒํŠธ ๋ฌธ์ œ๋“ค ์ค‘ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฐœ๋… ๋ฐ ๋ฌธ์ œ๋“ค์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

[Baekjoon] 1712. ์†์ต๋ถ„๊ธฐ์ 

: ์ด์ต์ด ๋ฐœ์ƒํ•˜๋Š” ์ง€์ ์„ ์ฐพ๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 1712 ๋ฌธ์ œ ๋งํฌ

A, B, C = map(int, input().split())
n = 0  //ํŒ๋งค๋Ÿ‰์œผ๋กœ์จ 0์œผ๋กœ ์ดˆ๊ธฐํ™” (๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’)

if B >= C:
    print(-1)
else: 
    print(int(A/(C-B)+1))
  • ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์„ ๋ฐฐ์šด์ง€ ์˜ค๋ž˜๋˜์–ด์„œ ์€๊ทผ ์ˆ˜ํ•™์ ์œผ๋กœ ์ดํ•ดํ•˜๋Š”๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์•˜๋‹ค.

A + Bn = Cn ์ด๋ฉด ์ด ์ˆ˜์ž…๊ณผ ์ด ๋น„์šฉ์ด ๊ฐ™์•„์ง€๊ฒŒ ๋œ๋‹ค.
์†์ต๋ถ„๊ธฐ์ ์ด ์กด์žฌํ•˜๋ ค๋ฉด ์˜ค๋ฅธ์ชฝ ์‹์ด ์ปค์ง€๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋ฏ€๋กœ
B๊ฐ€ C๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ปค์งˆ ๊ฒฝ์šฐ (B >= C), ์‹์ด ์„ฑ๋ฆฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ์—” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—” ์†์ต๋ถ„๊ธฐ์ (์ตœ์ดˆ๋กœ ์ด์ต์ด ๋ฐœ์ƒํ•˜๋Š” ํŒ๋งค๋Ÿ‰)์„ ์ถœ๋ ฅํ•œ๋‹ค.

A + Bn = Cn
A = (C-B)n
A / (C-B) = n

์œ„์—์„œ ๊ตฌํ•œ n์€ ์ˆ˜์ž…๊ณผ ๋น„์šฉ์ด ๊ฐ™์•„์ง€๊ฒŒ ๋˜๋Š” ์ง€์ ์ด๋ฏ€๋กœ
A / (C-B) ์— + 1์„ ํ•ด์•ผ ์ตœ์ดˆ๋กœ ์ด์ต์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.


[Baekjoon] 2292. ๋ฒŒ์ง‘

: ๋ฒŒ์ง‘์ด ํ˜•์„ฑ๋˜๋Š” ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฒŒ์ง‘์˜ ์œ„์น˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 2292 ๋ฌธ์ œ ๋งํฌ

n = int(input())

room = 1  # ๋ฒŒ์ง‘ ๊ฐœ์ˆ˜
plus = 6  # ๋ฒŒ์ง‘ ๋‹จ๊ณ„๊ฐ€ 6์˜ ๋ฐฐ์ˆ˜๋กœ ์ฆ๊ฐ€
count = 1  # ๋ฒŒ์ง‘ ๋ฒˆํ˜ธ

while n > room:
    room += plus
    plus += 6
    count += 1

print(count)
  • ๊ฐ€์žฅ์ž๋ฆฌ์— ํ•ด๋‹น๋˜๋Š” ๋ฒŒ์ง‘ ๊ฐœ์ˆ˜๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ํŒŒ์•…ํ•œ๋‹ค๋ฉด 6์˜ ๋ฐฐ์ˆ˜์”ฉ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ๋ฒŒ์ง‘ ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•จ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

2022.01.05

[Baekjoon] 1193. ๋ถ„์ˆ˜์ฐพ๊ธฐ

: ๋ถ„์ˆ˜์˜ ์ˆœ์„œ์—์„œ ๊ทœ์น™์„ ์ฐพ๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 1193 ๋ฌธ์ œ ๋งํฌ

x = int(input())

line = 0  # ํ•ด๋‹น ์ค„ ๋ฒˆํ˜ธ
end_index = 0  # ํ•ด๋‹น line์˜ ๋งˆ์ง€๋ง‰ num์˜ ์ธ๋ฑ์Šค๋ฒˆํ˜ธ

while end_index < x:
    line += 1
    end_index += line

num = end_index - line  # line=์ง์ˆ˜: x์™€ top์˜ ์ฐจ, line=ํ™€์ˆ˜: x์™€ bottom์˜ ์ฐจ

if line % 2 == 0:  # line์ด ์ง์ˆ˜์ผ ๋•Œ
    top = x - num
    bottom = line - top + 1
else:  # line์ด ํ™€์ˆ˜์ผ ๋•Œ
    bottom = x - num
    top = line - (bottom) + 1

print(f"{top}/{bottom}")
  • ๊ทœ์น™์ฐพ๋Š”๊ฒŒ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค,, line๋ณ„๋กœ ๋‚˜์—ด๊นŒ์ง€๋Š” ๊ทธ๋ž˜๋„ ์ฐพ์•˜๋Š”๋ฐ ๋ถ„๋ชจ, ๋ถ„์ž ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๋Š” ๊ฑธ ์‹์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š”๊ฒŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•ด๋„ ์–ด๋ ค์› ๋‹ค,,

2022.01.06

[Baekjoon] 2869. ๋‹ฌํŒฝ์ด๋Š” ์˜ฌ๋ผ๊ฐ€๊ณ  ์‹ถ๋‹ค

: ๋‹ฌํŒฝ์ด์˜ ์›€์ง์ž„์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 2869 ๋ฌธ์ œ ๋งํฌ

import sys
import math

a, b, v = map(int, input().split())

day = 0
day = (v-b) / (a-b)

print(math.ceil(day))
  • day= (v-b) / (a-b) ์ด ์‹์ด ๋‚˜์˜ค๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์€ ๋ฉ”๋ชจ์žฅ์— ๋„์ ์ด๋ฉด์„œ ํ’€์–ด๊ฐ”๋‹ค.
  • ์ •์ƒ์— ์˜ฌ๋ผ๊ฐ€๋ฉด ๋”์ด์ƒ ๋‚ด๋ ค์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— +a๊ฐ€ ํ•œ๋ฒˆ ๋” ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    (day-1)(a-b)+a = v
    daya - dayb - a + b + a = v
    daya - dayb + b = v
    day(a-b) + b = v
    day = (v-b) / (a-b)
  • '/'๋Š” ๋‚˜๋ˆ—์…ˆ ๋ชซ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— 5.4 ์ด๋Ÿฐ ์‹์œผ๋กœ ๋‚˜์˜ค๋ฉด 6์ผ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ math.ceil()๋ฅผ ์ด์šฉํ•ด์„œ day ๊ฐ’์„ ์˜ฌ๋ฆผํ•ด์ฃผ์–ด์•ผ ํ•จ.

2022.01.06

[Baekjoon] 10250. ACM ํ˜ธํ…”

: ํ˜ธํ…” ๋ฐฉ ๋ฒˆํ˜ธ์˜ ๊ทœ์น™์„ ์ฐพ์•„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 10250 ๋ฌธ์ œ ๋งํฌ

import sys

t = int(input())

for i in range(t):
    h, w, n = map(int, input().split())
    num = n // h + 1  # ๋ชซ
    floor = n % h  # ๋‚˜๋จธ์ง€

    if n % h == 0:
        num = n // h
        floor = h

    print(f'{floor*100+num}')
  • // : ๋‚˜๋ˆ—์…ˆ ๋ชซ
  • % : ๋‚˜๋ˆ—์…ˆ ๋‚˜๋จธ์ง€
  • ํ˜ธํ…”์˜ ๋งจ ์œ„์ธต์ผ ๊ฒฝ์šฐ์—” ๋‚˜๋ˆ—์…ˆ ๊ฐ’์ด ๋”ฑ ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ๋ฅผ ๊ตฌํ•  ๋•Œ+1์„ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ๋Š” if๋ฌธ์œผ๋กœ ๋”ฐ๋กœ ์กฐ๊ฑด์„ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•จ.

2022.01.06

[Baekjoon] 2775. ๋ถ€๋…€ํšŒ์žฅ์ด ๋ ํ…Œ์•ผ

: ์ธต๊ณผ ๊ฑฐ์ฃผ์ž ์ˆ˜์˜ ๊ทœ์น™์„ ์ฐพ๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 2775 ๋ฌธ์ œ ๋งํฌ

import sys

t = int(input())

for i in range(t):
    k = int(input())  # ์ธต
    n = int(input())  # ํ˜ธ

    base = [i for i in range(1, n+1)]  # 0์ธต์— ๋Œ€ํ•œ ํ˜ธ

    for j in range(k):
        for i in range(1, n):
            base[i] += base[i-1]
    print(base[-1])

2022.01.10

[Baekjoon] 2839. ์„คํƒ• ๋ฐฐ๋‹ฌ

: 5์™€ 3์„ ์ตœ์†Œ ํšŸ์ˆ˜๋กœ ํ•ฉํ•˜์—ฌ N์„ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 2839 ๋ฌธ์ œ ๋งํฌ

n = int(input())

count = 0
while n >= 0: # n์ด 5๋กœ ๋‚˜๋ˆ ์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
    if n % 5 == 0: # 5๋กœ ๋ฐ”๋กœ ๋‚˜๋ˆ ์ง€๋ฉด 5๋กœ ๋‚˜๋ˆˆ ๋ชซ์„ ๋ฐ”๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
        count += (n // 5)
        print(count)
        break
    n -= 3  # ๋ฐ”๋กœ 5๋กœ ๋‚˜๋ˆ ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด 3kg๋ฅผ ๋นผ์ฃผ๊ณ  ๋ด‰์ง€ ๊ฐœ์ˆ˜ +1
    count += 1
else:
    print(-1)

2022.01.10

[Baekjoon] 10757. ํฐ ์ˆ˜ A+B

: ํŒŒ์ด์ฌ ๊ฐ™์€ ์–ธ์–ด๋Š” 10,000์ž๋ฆฌ ์ •๋„์˜ ์ž์—ฐ์ˆ˜๋„ ์ž์œ ๋กญ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ C/C++์ด๋ผ๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ’€๊นŒ์š”?

๐Ÿ“˜ 10757 ๋ฌธ์ œ ๋งํฌ

a, b = map(int, input().split())
print(a+b)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void reverse(char arr[]) // ์—ญ์ˆœ ์ •๋ ฌ
{
    int len = strlen(arr);
    for (int i = 0; i < len / 2; i++)
    {
        char temp = arr[i];
        arr[i] = arr[len - i - 1];
        arr[len - i - 1] = temp;
    }
}
int main(void)
{
    char A[10002] = {0}, B[10002] = {0}, res[10003] = {0}; // ์ž๋ฆฌ์ˆ˜๋ฅผ ๋œปํ•จ
    int carry = 0, i;                                      //carry: ๋ฐ›์•„์˜ฌ๋ฆผ
    scanf("%s%s", A, B);
    reverse(A);
    reverse(B);

    int len = strlen(A) > strlen(B) ? strlen(A) : strlen(B);
    for (i = 0; i < len; i++)
    {
        int sum = A[i] - '0' + B[i] - '0' + carry;

        while (sum < 0)
            sum += '0';
        if (sum > 9)
            carry = 1;
        else
            carry = 0;
        res[i] = sum % 10 + '0'; //๋ฐ›์•„์˜ฌ๋ฆผ ํ›„ ๋‚จ์€ 1์˜ ์ž๋ฆฌ ์ˆ˜์˜ ์•„์Šคํ‚ค์ฝ”๋“œ ์ €์žฅ
    }
    if (carry == 1)
        res[len] = '1'; //๊ฐ€์žฅ ํฐ ์ž๋ฆฟ์ˆ˜์—์„œ ๋ฐ›์•„์˜ฌ๋ฆผ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์— 1์„ ์ถ”๊ฐ€
    reverse(res);       //์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋ณต์›
    printf("%s", res);
    return 0;
}
  • ํŒŒ์ด์ฌ์€ ๋‹ฌ๋ž‘ 2์ค„์ด๋ฉด ๋˜์ง€๋งŒ, C๋กœ๋Š” ๊ธด ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค...
  • C๋ฅผ ์ž˜ ์•ˆ ์“ฐ๋‹ค ๋ณด๋‹ˆ๊นŒ ๋ฌธ๋ฒ•๋„ ํ—ท๊ฐˆ๋ฆฌ๊ณ  ์ ‘๊ทผ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๊ตฌ๊ธ€๋งํ•ด์„œ ์™„์„ฑ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ๋„ ์‰ฝ์ง€ ์•Š์Œ .. ์ดํ•ด๊ฐ€ ๋” ํ•„์š”ํ•จ!

2022.01.10

[Baekjoon] 1011. Fly me to the Alpha Centauri

: ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ฅธ ์žฅ์น˜ ์‚ฌ์šฉ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ

๐Ÿ“˜ 1011 ๋ฌธ์ œ ๋งํฌ

import sys

t = int(input())

for i in range(t):
    x, y = map(int, input().split())
    distance = y - x
    count = 0  # ์ด๋™ ํšŸ์ˆ˜
    move = 1   # count๋ณ„ ์ตœ๋Œ€ ๊ฐ€๋Šฅ ์ด๋™ ๊ฑฐ๋ฆฌ
    total = 0  # ์ด๋™ ๊ฑฐ๋ฆฌ ํ•ฉ

    while total < distance:
        count += 1
        total += move

        if count % 2 == 0:
            move += 1
    print(count)
  • ์ด๋™ ํšŸ์ˆ˜์˜ ๊ทœ์น™์„ ์•Œ์•„๋‚ด์•ผ๋งŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.
    count: (1, 2), (3, 3, 4, 4), (5, 5, 5, 6, 6, 6) ...
  • ์ด ๋ฌธ์ œ๋„ ํ™•์‹คํ•˜๊ฒŒ ์ดํ•ด๋Š” ํ•˜์ง€ ๋ชป ํ–ˆ๋‹ค,, ๋‚˜์ค‘์— ๋” ์ดํ•ด๊ฐ€ ํ•„์š”ํ•œ ๋ฌธ์ œ!
profile
FE developer

0๊ฐœ์˜ ๋Œ“๊ธ€