# 16676 근우의 다이어리 꾸미기 (브론즈2)

  • point. 그리디 알고리즘 -> 규칙성을 찾아라
  • 0~10 => 1 / 11~110 => 2 / 111~1110 => 3 / 1111~11110 =>4 ~~
  • ex) n = 88
  • 입력받는 정수의 길이를 1로 표시
  • n이 일의 자리 정수라면 1 
  • n이 11보다 크거나 같다면 두 개의 스티커팩으로 표현 가능
  • n이 11보다 작다면(10인 경우) 한 개의 스티커팩으로 표현 가능 
N= input()
S = '1'*len(N)

if len(N) == 1:
    print(1)
elif int(N) >= int(S):
    print(len(N))
else:
    print(len(N)-1)

 

# 2437 저울 (골드3)

  • 무게가 양의 정수인 N개의 저울추가 주어질 때, 이 추들을 사용하여 측정할 수 없는 양의 정수 무게 중 최솟값을 구하는 프로그램을 작성하시오.
  • 예를 들어, 무게가 각각 3, 1, 6, 2, 7, 30, 1인 7개의 저울추가 주어졌을 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21이다. 
  • point. 그리디 알고리즘 -> 규칙성을 찾아라
  • 현재까지의 합 + 1 보다 큰 값이 다음 인덱스에 저장된 수라면 이전의 추들로 무게를 구할 수 없다.
n, a = int(input()), sorted(list(map(int, input().split())))
ans = 0
for i in a:
    if i <= ans +1:
        ans += i
    else:
        break
print(ans+1)

 

단계별풀기 - 기본수학2

# 1002 터렛 (실버4)

  • 조규현의 좌표 (x1, y1)와 백승환의 좌표 (x2, y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
  • 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
  • point. 원과 원의 접점의 개수를 구하는 문제
    1. 두 원이 일치하는 경우 -> -1, 0
    2. 두 원이 한 점에서 만나는 경우(외접, 내접) -> 1
    3. 두 원이 만나지 않는 경우 -> 0
    4. 두 원이 두 점에서 만나는 경우 -> 2
t = int(input())
for i in range(t):
    x1, y1, r1, x2, y2, r2 = map(int, input().split())
    d = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
    rs = r1 + r2
    rm = abs(r1 - r2)
    if d == 0:
        if r1 == r2:
            print(-1)
        else:
            print(0)
    else:
        if d == rs or d == rm:
            print(1)
        elif d < rs and d > rm:
            print(2)
        else:
            print(0)

 

단계별풀기 - 재귀

# 10872 팩토리얼 (브론즈 3)

  • 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
def fac(n):
    if n == 0:
        return 1
    elif n == 1:
        return 1
    return  n * fac(n-1)

N = int(input())
print(fac(N))

 

# 10870 피보나치수 5 (브론즈2)

  • 첫째 줄에 n번째 피보나치 수를 출력한다.
def f(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    return  f(n-1) + f(n-2)

N = int(input())
print(f(N))
반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210128_코테공부  (0) 2021.01.28
20210127_코테공부  (0) 2021.01.27
20210125_코테공부  (0) 2021.01.25
20210122_코테공부  (0) 2021.01.22
20210121_코테공부  (0) 2021.01.21

# 1439 뒤집기 (실버5)

  • 0과 1로만 이루어진 문자열에서 연속구간 뒤집기를 통해 한문자로만 이루어진 문자열을 만들려 할때, 뒤집기 시행횟수 구하기
  • point. 그리디 알고리즘 -> 규칙성을 찾아라
  • 뒤에 문자랑 비교해서 같은 문자끼리 뭉텅이 구하기 -> 뭉텅이//2
s = input()
count = 0
for i in range(len(s)-1):
    if s[i] != s[i+1]:
        count +=1
print((count+1)//2)

 

단계별풀기 - 기본수학2

# 1085 직사각형에서 탈출 (브론즈3)

  • 한수는 지금 (x, y)에 있다. 직사각형의 왼쪽 아래 꼭짓점은 (0, 0)에 있고, 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.
  • point. (0.0)에 가까운 x,y 거리도 고려해야한다.
x, y, w, h = map(int, input().split())
print(min(w-x, h-y, x, y))

 

# 3009 네 번째 점 (브론즈3)

  • 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.
x_list = []
y_list = []
for i in range(3):
    x, y = list(map(int, input().split()))
    x_list.append(x)
    y_list.append(y)

for i in range(3):
    if x_list.count(x_list[i]) == 1:
        x = x_list[i]
    if y_list.count(y_list[i]) == 1:
        y = y_list[i]
print(x,y)

 

# 4153 직각삼각형 (브론즈3)

  • 주어진 세변의 길이로 삼각형이 직각인지 아닌지 구분하시오.
  • 각 입력에 대해 직각 삼각형이 맞다면 "right", 아니라면 "wrong"을 출력한다.
while True:
    rec_list = list(map(int, input().split()))
    if rec_list[0] == 0 & rec_list[1] == 0 & rec_list[2] == 0:
        break
    rec_max = max(rec_list)
    rec_list.remove(rec_max)

    if rec_max**2 == rec_list[0]**2 + rec_list[1]**2:
        print("right")
    else:
        print("wrong")

 

# 3053 택시 기하학 (브론즈3)

  • 첫째 줄에는 유클리드 기하학에서 반지름이 R인 원의 넓이를, 둘째 줄에는 택시 기하학에서 반지름이 R인 원의 넓이를 출력한다. 정답과의 오차는 0.0001까지 허용한다.
  • 유클리드 기하학 원의 넓이 : 반지름 * 반지름 * 3.1415...(파이)
  • 택시 기하학에서의 반지름이 R인 원의 넓이란, “두 대각선의 길이가 2R인 마름모의 넓이” 와 같다
import math
r = int(input())
print(r*r*math.pi)
print(r*r*2)
반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210127_코테공부  (0) 2021.01.27
20210126_코테공부  (0) 2021.01.26
20210122_코테공부  (0) 2021.01.22
20210121_코테공부  (0) 2021.01.21
20210120_코테공부  (0) 2021.01.20

+ Recent posts