분류 전체보기 324

[백준-파이썬] 11726번: 2Xn 타일링

백준 문제 보러 가기~! 코드😎 n = int(input()) dy = [0]*(n+1) if n == 3: print(n) else: dy[1] = 1 dy[2] = 2 for i in range(3,n+1): dy[i] = dy[i-1]+dy[i-2] print(dy[n]%10007)설명😊 다이나믹 프로그래밍!! 일단 n이 1이라면, 당연히 답은 1이다. 세로로만 세울 수 있다. n이 2라면 답은 2이다. 세로로 두개 혹은, 가로로 두개가 가능하다. n이 3이라면 두 가지 경우로 나눌 수 있다. 맨 끝 부분에서, 세로로 하나인 경우, 그러면 그 안쪽부분은 2개가 있다. 그럴 때 안쪽 2개를 배치하는 방법은 n=2일 때 경우의 수와 같다. 맨 끝 부분에서 가로로 두개를 둘 경우, 안쪽에는 하나만 남았다..

[백준-파이썬] 21317: 징검다리 건너기

import sys input = sys.stdin.readline N = int(input()) stones = list(tuple(map(int, input().split())) for _ in range(N - 1)) stones = [0] + stones K = int(input()) arr = [] def dfs(idx, use_bigbig_jump, energy_sum): if idx == N: # 최종 돌까지 갔을 때 든 에너지 총합을 arr에 저장 후 리턴 arr.append(energy_sum) return elif idx > N: # 최종 돌을 넘어가면 리턴 return if use_bigbig_jump == False: # 매우 큰 점프 안했는지 체크한 후, 매우 큰 점프 사용 dfs..

[백준-파이썬] 17392. 우울한 방학

문제 보러 가기~ ㅠㅠㅠ 그리디 문제는 아이디어 떠올리기가 어려워서 다른 분들 것을 참고할 때가 많았다.. 그러다가 오랜만에 스스로 푼 문제..!! 접근 일단 문제에서 구할 것은 '우울함의 합'을 최소화하자는 것이다. 우울함은 기분 0 미만인 날에서 (기분)^2이다. 약속의 순서는 바꿀 수가 없이 언제 할지 배치하는 것이다. 일단 기분이 0 이상이면 괜찮은 상황이다. => 모든 날의 기분이 0 이상일 수 있으면 정답은 0이다. => 모든 날의 기분이 0 이상일 수 없으면, 약속이 몰려 있어서 외로움이 극대화되는 것보다는 (약속이 쭉 있다가 약속 없는 날이 연속 4일이 되는 경우에, 외로움은 1의 제곱+ 2의 제곱+ 3의 제곱+ 4의 제곱이 된다.) 기분의 제곱을 해서 우울함 수치를 구하니까..

[백준-파이썬] 1167: 트리의 지름

문제 보러 가기! 접근 전에 트리를 배우고 이 문제도 풀고 싶었다.. 문제는 간단하지만 어떻게 풀지 몰랐다가 스터디에서 이 문제를 다뤘다. 트리의 지름을 찾고 싶으면, 임의의 정점 x를 잡고 거기에서 가장 먼 정점 y를 찾으라고 했다. 그리고 y에서 가장 먼 정점 z가 있을 텐데, y와 z 사이의 거리가 트리의 지름이라고 하셨다. 뭔가 수학적으로도 설명해주셨고 쉽게 원그림으로도 설명해주셨다. 원 안의 어떤 점 x를 잡고 거기에서 젤 먼 점 y를 잡으면 어떻게 될까? x에서 원의 중심을 지나서 원의 호가 y가 될 것이다. 그리고 y에서 가장 먼 점 z를 찾으면, 원의 어떤 호에서 중심을 지나서 다른 호로 갈 것이다. 그럼 그게 원의 지름이 된다. 이 아이디어를 구현해봤다! 코드 import sys inpu..

[백준-파이썬] 11725: 트리의 부모 찾기

문제 보러 가기 접근 일단 인접한 노드들을 저장해주었다. 어디가 부모인지, 어디가 자식인지 모르니까 일단은 방향 없이 모두~ 그리고 루트를 1로 삼고 거기에서부터 쭉~ 자식을 보러 갔다. 부모를 저장하는 리스트를 만들어서 부모 노드가 몇번 노드인지 저장해줬다. 인접한 노드들을 쭉~ 보되 이미 방문 체크가 되었다면 보지 않았다. 이미 방문 체크가 되었다면, 자식이 아니라 부모라는 뜻이니까.. 코드 import sys input = sys.stdin.readline sys.setrecursionlimit(10 ** 5) N = int(input()) adj = [[] for _ in range(N + 1)] for _ in range(N - 1): a, b = map(int, input().split()) ..

for ~else

if, elif, else는 자주 썼는데 for, else가 있다는 것은 처음 알았다!(전에 배웠을 수도 있는데 기억은 안난다..) 코드1 for i in range(10): print(i) else: print(10) 결과1 0 1 2 3 4 5 6 7 8 9 10 코드2 for i in range(10): print(i) if i==5: break else: print(10) 결과2 0 1 2 3 4 5 코드3 for i in range(10): if i==9: continue print(i) else: print(10) 결과3 0 1 2 3 4 5 6 7 8 10 -> for문이 끊기지 않으면, for문이 끝난 후에 else부분이 작동한다. 중간에 break로 끊기면 else부분은 작동하지 않는다...

range class

코드 a=range(10) print(a) print(type(a)) print(list(a))결과 range(0, 10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]for i in range(10) 이런 식으로 자주 쓰면서도 range에 대해서 별 생각 없었다.. 그러다 이번에 파이썬 복습하면서 'range'라는 class가 있다는 걸 알게 되어서 신기했다. 파이썬 2에서는 print(type(range(10)))을 하면 라고 했다는데, 파이썬 3에서는 라고 한다. 파이썬 2에서는 range, xrange가 있었다는데, 파이썬3에서는 통합되었다고 한다. 파이썬3의 range는 파이썬2의 xrange와 비슷하다고 한다.

728x90