전체 글 100

[백준 알고리즘] 2468번 안전 영역. 파이썬(python)

오답1) 1 5 위의 입력이 주어졌을 때, print(max(safe_area)) ValueError: max() arg is an empty sequence 리스트의 값이 비어있어 max함수를 사용할 수 없게 된다. 그래서 safe_area=[]에서 safe_area=[0]로 초기화를 바꿔줬다. from collections import deque import sys input=sys.stdin.readline n=int(input()) a=[list(map(int,input().split())) for _ in range(n)] min_n=1e9 max_n=-1e9 for i in a: if min_n>min(i): min_n=min(i) if max_n

알고리즘 2022.07.20

[백준 알고리즘] 11053번 가장 긴 증가하는 부분 수열. 파이썬(python)

n=int(input()) a=list(map(int, input().split())) dp=[1]*n for i in range(n): for j in range(i): if a[i]>a[j]: # 현재i가 이전j보다 크다면 print('i,j',i,j) print('전',dp) dp[i]=max(dp[i],dp[j]+1) print('후',dp) print() print(max(dp)) dp[i]=max(dp[i],dp[j]+1) 수열 = [10, 20, 10, 30, 20, 50] i,j 3 0 현재 값: 30, 전 값: 10 현재 값이 더 크므로 dp[j]+1 선택 전 [1, 2, 1, 1, 1, 1] 후 [1, 2, 1, 2, 1, 1] 수열 = [10, 20, 10, 30, 20, 50] i,..

알고리즘 2022.07.19

[백준 알고리즘] 1699번 제곱합. 파이썬(python)

오답) 틀린 이유: n보다 작은 제곱값 중 제일 큰 수를 빼는 것을 반복하면 최소가 나올 줄 알았다. 예제로 나온 값들도 결과가 맞았었다. 그런데 52와 같은 반례를 보니 틀린 것을 알 수 있었다. 52=49+1+1+1 로 큰수를 빼면 정답이 4이지만, 52=36+16으로 계산하면 2번만에 구할 수 있다. 따라서 dp를 사용해 각 값의 최소연산 수를 구해야 한다. import sys input=sys.stdin.readline n=int(input()) sq=[i*i for i in range(1,318)] cnt=0 while n!=0: for i in range(len(sq)): if sq[i]>n: # 작은값 중에 제일 큰 값 n=n-sq[i-1] cnt+=1 break print(cnt) 정답) ..

알고리즘 2022.07.17

[백준 알고리즘] 16173번 점프왕 쩰리. 파이썬(python)

점프를 아래, 오른쪽으로만 할 수 있다고 해서 방문표시가 필요 없다고 생각했다. 현재 밟고 있는 칸에 쓰여진 숫자가 0이라면, 0만큼 이동하게 되어 제자리를 무한반복하게 된다. 따라서 방문 체크 리스트를 만들던가, 현재 밟고 있는 칸의 값이 0이 아니다를 조건으로 설정해 주어야 한다. import sys from collections import deque input=sys.stdin.readline n=int(input()) graph=[list(map(int,input().split())) for _ in range(n)] dx=[1,0] dy=[0,1] def bfs(x,y): q=deque() q.append((x,y)) while q: x,y=q.popleft() if graph[x][y]==-..

알고리즘 2022.07.14

[백준 알고리즘] 11723번 집합. 파이썬(python)

입력형식이 매번 똑같지 않다. whitespace 기준으로 문자열을 나누어 저장할 때, 하나의 변수에 저장하면 리스트형식으로 저장되며 whitespace의 개수가 상관없다. 변수를 여러개로 설정하면 변수의 개수만큼의 입력만 받을 수 있다. a,b=input().split() s=input().split() 확인할 값을 int형으로 바꿔줘야 메모리 초과가 안 난다. import sys input=sys.stdin.readline n=int(input()) s=set() for _ in range(n): word=input().split() # ['remove', '1'] # ['empty'] if len(word)==1: # 한단어만 들어올 경우 cons=word[0] else: # 두단어가 들어올 경우 ..

알고리즘 2022.07.14

[백준 알고리즘] 10815번 숫자 카드. 파이썬(python)

시간초과 반복문으로 하나하나 판별하기엔 범위가 커서 시간초과가 생긴다. (in 연산은 하나하나 탐색함.) n=int(input()) cards=list(map(int,input().split())) m=int(input()) have=list(map(int,input().split())) for h in have: if h in cards: print(1,end=' ') else: print(0,end=' ') 정답 시간을 최대한 줄이가 위해 이진탐색을 사용한다. n=int(input()) cards=list(map(int,input().split())) m=int(input()) have=list(map(int,input().split())) cards.sort() def binary_search(st..

알고리즘 2022.07.14