[백준] Python 알고리즘 연습 Day6

주말이라 시간이 남아 알고리즘 문제풀이에 시간을 더 들였다.
하다보니깐 재미들려서 많이 한 느낌이다. 우선 1차 목표로 두었던 단계별로풀어보기의 재귀까지 풀었으므로 이제는 백준 알고리즘 기초1에 포함되어있는 문제를 위주로 풀어나가며 단계를 올려볼 생각이다. 아직 푼 문제가 많지 않아서 등급은 아직 실버지만 꾸준히 연습해서 골드이상까지는 올려보고 싶다.
재귀에 대한 부분이 이해하는데 시간이 걸렸다. 익숙해져야할 필요성이 있어보인다.

백준 4153번 직각삼각형

while True:
    a,b,c = map(int,input().split())
    if (a==0 and b==0 and c==0):
        break
    else:
        if a**2 == b**2 + c**2 or b**2 == a**2 + c**2 or c**2 == a**2 + b**2:
            print('right')
        else:
            print('wrong')

백준 3053번 택시 기하학

import math
R = float(input())
ucli_area = math.pi*(R**2)
taxi_area = 2*(R**2)
print('%.6f' %ucli_area)
print('%.6f' %taxi_area) # 소수점 제한 방법

백준 1002번 터렛

T = int(input())
for i in range(T):
    x1,y1,r1,x2,y2,r2 = map(int,input().split())
    total_len = ((x1-x2)**2 + (y1-y2)**2)**(1/2)

    if total_len == 0 and r1 == r2: # 동심원
        print(-1)
    elif abs(r1-r2) == total_len or r1+r2 == total_len: # 내접, 외접
        print(1)
    elif abs(r1-r2) < total_len < r1+r2 :
        print(2)
    else:
        print(0)

백준 10872번 팩토리얼

#재귀함수를 이용할 것
N = int(input())
def factor(x):
    if x<1:
        return 1
    return x*factor(x-1)
    
if N==0 :
    print(1)
else:
    print(factor(N))

백준 10870번 피보나치 수 5

#재귀함수 이용할 것
n = int(input())
def Fibo(x):
    if x==0:
        return 0
    elif x==1:
        return 1
    return Fibo(x-1)+Fibo(x-2)
print(Fibo(n))

백준 2447번 별 찍기 - 10

# 재귀함수 패턴
# list를 이용해보자
# 상당히 막혀서 자료를 좀 찾아봤다
N = int(input())     
def draw_star(n) :
    global Map # 전역변수
    if n == 3 :
        Map[0][:3] = Map[2][:3] = [1]*3 # 첫 번째 행, 세 번째 행 1
        # [1] * 3 = [1, 1, 1]
        Map[1][:3] = [1, 0, 1] # 두 번째 행 0
        return

    else:
        a = n//3
        draw_star(n//3)     # 재귀함수    
        for i in range(3) : # 행 3번반복
            for j in range(3) : # 열 3번반복
                if i == 1 and j == 1 : # 중복 제외
                    continue
                for k in range(a) :    # a*i+k행에서 a*j,a*j+1열까지 채움
                    Map[a*i+k][a*j:a*(j+1)] = Map[k][:a]    # 첫번째 패턴에서 복사해옴
# Map을 0으로 초기화
Map = [[0 for i in range(N)] for j in range(N)]

draw_star(N)

for i in Map :
    for j in i :
        if j==1 :
            print('*', end = '')
        else :
            print(' ', end = '')
    print()

백준 11729번 하노이 탑 이동 순서

#하노이의 탑
N = int(input())
'''
hanoi(3, A, C, B)
# N-1개의 원반을 A에서 B로
# N-1개의 원반을 B에서 C로
hanoi(2, A, B, C) # 2개의 원반을 B로, 1개의 원반을 C로 (경유)
hanoi(2, B, C, A) # B의 두개의 원반을 C로 (이 때 A경유)
'''
def hanoi(N, start, to, via): # N : 개수 Start: 출발점 to:도착점 via:경유점
    if N == 1:
        print(start, to)
    else:
        hanoi(N-1, start, via, to)
        print(start, to)
        hanoi(N-1, via, to, start)
print(2**N-1)
hanoi(N, 1, 3, 2)

좋은 웹페이지 즐겨찾기