즐거운 PS 👩‍💻🥰 141

[백준-파이썬] 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()) ..

[백준-파이썬] 1929번: 소수 구하기

https://www.acmicpc.net/problem/1929 예전 도전(실패)- 문제 풀이 예전에 풀 때는 N 이하 소수를 찾아서 리스트 S 안에 넣고, 나중에 S에서 M 미만의 소수를 제거했다. 그리고 S의 값을 출력했다. 그랬더니 시간 초과가 나왔다. 예전 도전(실패)- 코드 M,N=map(int, input().split()) # N이하 소수 찾기-> 리스트 S에 넣기 S=[2,3] for i in range(4, N+1): if i%2==1: for j in range(len(S)): if i % S[j] ==0: break else: if j==len(S)-1: S.append(i) # M이상 N이하 소수 찾기 for o in S: if M M이 1일 때 문제 생겨서 sosu=[] #에라토..

[백준-파이썬] 1747번: 소수&팰린드롬

N=int(input()) L=[0]*1003002 #조건에서 N 최댓값이 1000000이라고 함. 그 이상 소수이고 펠린드롬 만족하는 가장 작은 수가 1003001임. L[1]=1 #N 미만의 소수를 구함 for i in range(2,N): if L[i]==0: for j in range(i,1003002,i): L[j]=1 #N이상 for k in range(N,1003002): if L[k]==0: #j가 소수라면 if str(k)==str(k)[::-1]: #펠린드롬인지 체크 print(k) break else: for l in range(k,1003002,k): L[l]=1 에라토스테네스 체 방법으로 소수 구하는 것 공부한 후에, 관련된 문제 풀어보고 싶어서 풀었다~ L=[0]*1003002 ..

[백준-파이썬] 2805번: 나무 자르기

백준 2805번 문제 문제 풀이 이분 탐색을 활용해서 풀었다. 1.나무 자르는 위치가 가장 낮을 때(0) 값을 down으로, 가장 높을 때(가장 높은 나무의 높이) 값을 up으로 함. (처음에는 나무 자르는 위치가 가장 낮을 때를 가장 작은 나무 높이로 했는데, 그게 아니었다!) 2. mid를 up, down을 더하고 2로 나눈 몫으로 함. 이 위치에서 나무들을 자를 경우에 잘린 나무들의 합을 구함. 3-1. 잘린 나무들의 합이 필요한 나무 길이와 일치하는 경우: answer에 mid를 대입하고 break하기 3-2. 필요한 나무 길이보다 많은 경우: 이게 정답이 될 수도 있는 것이니까(3-1이 안될 경우에) answer에 mid를 대입함. 그리고 down을 mid+1로 바꿔서 2로 돌아감. 3-3. 필..

[백준-파이썬] 4454번: 상근이의 여자친구

백준 4454번 이분탐색법으로 풀었다. 풀이방법을 생각하는 것은 어렵지 않았는데, 헷갈리는 몇 가지가 있었다. 그래서 엄청 많이 틀리다가 겨우 맞았다.. 🤔헷갈렸던 것들🤔 1. 초등학교 때 배웠던 거리, 속력, 시간의 관계 생각하기..^^ 아래 나온 코드를 짤 때, 거 속 시를 활용했다. def useOil(speed): return (a * (speed ** 4) + b * (speed ** 3) + c * (speed ** 2) + d * speed) * (m / speed)나중에는 아래와 같이 정리했다. return ((a * (speed ** 3) + b * (speed ** 2) + c * (speed) + d) * m)2. 소수점 고려하기! 이분탐색법 문제를 풀 때, mid=(left+righ..

[백준-파이썬] 16505번: 별

백준 16505번 첫번째 시도 => 실패 😢 재귀를 사용해서 풀었다 ! 아래와 같이 풀었는데, 형태는 비슷한데 답은 틀렸다. '출력형식이 잘못되었습니다'라고 나왔다. 문제에 라고 써있는데, 이 부분을 만족하지 못한 것 같다. def triangle(ans,n,m): if n==1: return '*' else: tmp=list(triangle(ans,n-1,m-1).split('\n')) #print(tmp) for i in range(len(tmp)): ans+=tmp[i]*2 ans+=' '*(2**m-len(tmp[i]*2)) ans+='\n' #ans=ans[:-1] for i in range(len(tmp)-1): ans+=..

[백준-파이썬] 1012번: 유기농 배추

백준 1012번 문제 보러가기~~ 📌 포인트 DFS로 풀었다!! 방금 푼 단지번호 붙이기 문제와 비슷한 것 같다. 백준 단지번호 붙이기 문제 보러가기 내 풀이 보러가기 😅 위기 잘 풀었다고 생각했는데 '런타임 에러 (RecursionError)'가 나왔다. DFS로 풀었는데 다음에는 BFS로 생각해봐야지~ 백준 안내에 있는 대로 import sys sys.setrecursionlimit(10**6)를 추가해서 파이썬 최대 재귀 깊이를 크게 설정하니 성공했다. 👩‍💻 코드와 설명 import sys sys.setrecursionlimit(10**6) # 최대 재귀 깊이 설정 dx=[-1,0,1,0] dy=[0,1,0,-1] def DFS(x,y): for p in range(4): #상하좌우..

[백준-파이썬] 2468: 안전 영역

백준 2468번 문제! 🔑코드와 설명 BFS로 풀었다. from collections import deque import copy #위, 아래, 오른쪽, 왼쪽을 체크하기 위해서 dx=[-1,0,1,0] dy=[0,1,0,-1] #입력 받기 n=int(input()) zone=[list(map(int,input().split())) for _ in range(n)] #가장 낮은 곳, 가장 높은 곳을 파악하려고 함 start=float('inf') #가장 낮은 곳의 높이 (사실 이 값은 사용하지 않음..) finish=-float('inf') #가장 높은 곳의 높이 for i in zone: for j in i: if j finish: finish=j safe_zone=[] #여..

728x90