메모리 초과 문제로 check를 list말고 set으로 0으로 나눌 수 없는 문제 때문에 배열에 x/x대신 0 을 넣어줬고 밑에서는 x!=0 조건을 추가문제 조건에 가능한 연산이 여러 개이면 아스키코드 연산 순 (사전 순 )으로 한다고 했으니 if 문의 순서 또한 중요
아기 상어는 자신의 크기와 같은 수의 물고기를 먹을 때 마다 크기가 1 증가한다. 예를 들어, 크기가 2인 아기 상어는 물고기를 2마리 먹으면 크기가 3이 된다. -> 이 조건을 안봄시간 복잡도 계산
상어를 모두 큐에 넣고 상어로부터 빈칸의 최소거리를 구하는 방식이 안되는 이유?시간복잡도 계산
시간 복잡도 계산
런타임에러가 나는 코드 : n = 1 일 때 for 문의 범위 때문에\-> 기초적인 실수 조심하기올바른 코드
dp + 이차원배열n = 0, 1, 2 일 때 예외처리d의 열이 3개밖에 안되는데 반복문으로 해결하려고 해서 시간 초과만 남\-> 단순하게 생각
카드 구매하기와 차이점 max -> min
dp + 이차원 리스트 -> 표 그려보기예외처리
dp + 이차원 배열
하나짜리 수열도 증가하는 수열인지 몰랐어서 예외처리해야 하나 하고 헤맸음..처음 짠 코드는 너무 쉽게 생각함반례 : 10 20 10 10000 20 30 40 50 60 70
단순하게 생각하면 각 숫자마다 두가지 경우의 연속합이 생길 수 있다.1\. 그 숫자로 시작하는 연속합2\. 그 숫자로 끝나는 연속합index의 값을 차례대로 비교하면서 max를 찾는다
pypy 제출 : 파이썬으로 시간 내에 풀기ans = 0 \* (n + 1)for i in range(1, n + 1): j = 1 while True: if j j >= i: ansi = ans\[i - (jj)] + 1
dp + 이차원배열
bfs + 재귀(바이러스 놓기)
비활성 상태 -> #2
> 배열 a의 행과 열이 바뀔 수 있기 때문에 이 부분이 행렬마다 필요함 ops = [op1, op2, op3, op4, op5, op6] for k in map(int, input().split()): a = opsk-1 for row in a:
배열 돌리기 아이디어 : 1\. 이차원 리스트를 그룹을 만들어 일차원 리스트로 만듬2\. 나머지 연산을 통해 일차원 리스트의 순서를 바꿈3\. 순서 바꾼 일차원 리스트를 다시 이차원 리스트로 만듬
배열 돌리기 1과의 차이점 : r의 크기가 매우 커질 수 있다 -> 나머지 연산을 통해 해결
처음 제출한 코드 : 함수를 이용해서 만들었는데 함수 앞에 저런 식으로 a를 선언하면 선언 할때마다 초기화돼서 틀림이렇게 해야 맞음..주사위(3차원) : 일차원리스트로 구현하여 동서남북(어차피 4가지) 다 해본다
dp + 이차원 리스트마지막 나누기 10007 안해서 틀림...
메모리 초과 코드 : 나누기를 안함시간 초과 코드 : 매번 d를 다시 계산하면 시간 너무 많이 걸림시간 초과 코드 : 나름 머리를 써봄. 계산횟수를 줄였는데 그다지 줄여지지 않은듯먼저 d를 다 구하고 구함
dp + 이차원리스트
dp + 이차원 리스트
dp + 이차원리스트 : 예외처리(ex. n = 1 등등) 조심포도주를 시식하는 3가지 경우의 수 : 0번째로 먹기(=먹지 않음), 1번째로 먹기, 2번째로 먹기를 이차원 리스트의 행(또는 열)로 나눠서 푼다
dp + 이차원 리스트
이거.., 진짜 왜 틀림...? 진ㅉㅏ 왜...?결국 풀긴 함.각 톱니의 방향을 먼저 구하고 -> 각 행마다 방향대로 돌린다
ai 보다 작은 인덱스의 숫자들 순회하며 1.
앞에서부터 증가하는 가장 긴 수열 2. 뒤에서부터 증가하는 가장 긴 수열두가지 배열을 만들어서 브루트포스로 각 인덱스를 기준으로 두 값의 합이 가장 큰거 구함(인덱스까지 증가 + 감소 = 바이토닉)처음에는 인덱스 기준 앞은 증가하는, 뒤는 감소하는 가장 긴 수열을 인덱
재귀함수를 통해 구하고 + sum 대신 메모이제이션을 추가하여 dp로 푼다
dp -> 작은 문제들이 많은 경우가 있다이 문제는 n이 짝수일 때 마다(2 제외) 가운데 걸쳐있는 경우가 2가지씩 생겨서 이것을 모두 포함해주어야 한다.
하나를 빼고 연속합을 모두 구하기엔 시간 초과 각 인덱스마다 그 수로 시작하는 연속합과 그 수로 끝나는 연속합을
나의 문제 정사각형 구하는 걸 복잡하게 생각 : 간단하게 check 와 for 문으로 해결하면 될걸 배열을 만들어서 거기 모든 정사각형을 넣고 확인하려고 듬. 이 문제의 x, y가 행렬이 뒤바뀌어 있었는데 그냥 x = 행 y = 열 이라고 생각함. 입혁시 y, x 순서
처음에는 단순히 중간에 생기는 칸을 생각 못하고 구함중간에 높이 차가 생기면 겉넓이가 생기니까 행/열마다 for 문을 이용해서 풀었음
그냥 구현 문제처음에 for 문 범위 잘 못 설정해서 헤맴탐색으로 풀 수 없을까 고민해보기....되면 한다
bfs 로 풀 수 있다dp..
구현 문제(pypy로 제출). 하라는 대로 했다. 뭔 말인지 처음에 이해가 어려웠음더 많이 풀어봐야할듯
처음에는 이런식으로 단순하게 bfs 구현했다. 당연히 메모리 초과 나고 999 같은 큰 수는 계산되지도 않았다. 배열 대신 set도 써보고 했는데 모르겠었음. 대충 나머지에 대한 것은 접근했는데 구현까지 이어지지 않음.check, how, afrom 배열은 왜 크기가
dp + 2차원 리스트1차시도 : 시간 초과를 생각을 안함 2차시도 : ...정답 : n의 범위가 10000밖에 안되는데 한번에 계산하는게 빠르다복습 + 시간복잡도 계산
동생과 언니가 어느 한 지점에 둘다 짝수번 또는 홀수번만에 도착하면 언니는 +1 과 -1을 반복(원점으로 돌아가길 반복)해서 동생과 만날 수 있다. 조건 . 언니가 동생보다 만날 지점에 빠른 시간에 도착해야함ex) 테스트케이스 1번에서15에서 최종적으로 둘이 만나면 언
dp + 이차원 리스트i : 번째 배낭까지 탐색j : 총 무게놓고 탐색하며 di 값을 업데이트한다.무게가 같은 것이 다른 조합으로 이미 있을 수 있으니 max를 썼다.처음에는 이런 식으로 짜서 갱신된 값은 업데이트가 안되는 문제가 있었다.(설명이 잘 안됨)88% 에서
벽을 모두 큐에 넣고 탐색 (pypy제출)경계부분만 벽이 있는지 탐색하였다. 시간이 줄어들음.(pypy 제출)python3 는...?
check 배열을 이차원으로 만들어서 첫 열에는 시간, 두번째 열에는 방법을 저장한다.만약 방문한 적이 없다면 시간은 + 1, 방법은 지금 갯수 그대로만약 방문한 적이 있고(다른 방법) 최단거리(원래 있던 거리랑 같아야함)로 왔다 -> 방법 + 1ex. 1 4 와 같은
처음에 ans 의 초기값은 nnl로 잡았더니 너무 작았는지 틀려서 걍 크게 잡음비트마스크로 모든 집합을 구해서 정답 구함치킨집을 최대 m개라는 조건을 생각해야하는데 까먹고 있었음비트마스크 아직 잘 몰라서 코드 짜는데 헤맴
하라는대로 구현 공기를 회전시키는게 헷갈려서 오래걸림 -> 그림그리면 안헷갈린다...
구현 문제, 시간 증가 시점에서 조금 헷갈렸다. 방향을 전환하고 시간을 증가시켜야함
바뀌면 안되는 것 구분!! 기준이 되는 것은 바뀌면 안됨 -> circle_tmp를 만들어줌그리고 zero division 도 나누기 할 때는 꼭 생각해야됨...
왜안돼.......? 어떻게 바로잡는지도 모르겟다
처음에 이런 코드를 짰었는데자꾸 TypeError: 'NoneType' object is not subscriptable 가 나와서 뭔가 한참 찾았는데 change 함수에서 return 값이 none이 나오는 경우가 생김계속 재귀를 들어가고 끝내지 못한다면 return
인덱스 문제로 헷갈려서 오래걸림...마지막 루프 빠져 나올 때 t >= 1000 으로 했다가 틀려서 힘들었음...1000번째까지 냄새퍼지고, 이동 가능하고 10001번째는 모든 이동을 끝내도 결과를 낼 수 없음
하라는 대로 구현인데 정말 저 배열을 만들어야하나 고민이 좀 됐음\-> 다른 방법으로도 풀어보기(대칭이용)자꾸 배열 a가 변하는데 값을 갖다쓰니까 잘못된 값이 나왔음\-> deepcopy 썻는데 시간 초과 -> 어차피 하나의 값만 저장하니까 걍 변수로 저장deepcop
처음 짠 코드 : 0%대에 틀림(방향이 모두 짝수거나 모두 홀수면) -> 0, 2, 4, 6(그 외) -> 1, 3, 5, 7인데 이상하게 생각함그렇다고 합으로 하면 안되는게 짝+짝+짝+짝도 합이 짝수지만 홀+홀+짝+짝도 합이 짝수다하나하나 따져줘야함. 문제를 잘 보면
!! 얘는 왜 안되는지 생각해보기
무턱대고 bfs 하나하나씩 돌리면 시간 초과 (n 과 m 이 매우 큼)0개들을 그룹을 지어서 한 1에 인접한 0개들 그룹 속 인접한 0의 갯수를 다 더해줌
(pypy 제출) 부수는 벽의 갯수를 check 배열에 넣었다시간 줄일 수 있을까?
에라토스테네스 체로 소수를 모두 구한 후 -> 한자리씩 1-9 또는 0-9 를 바꿔 넣어서 bfs
투포인터로 풀어봤다
투포인터로 풀어봤다
처음에 n 이 1인 경우를 고려하지 않음에라토스테네스 체 + 투포인터
처음에 이동 -> bfs -> 이동 ->bfs ... 이런 식으로 해서 시간 초과처음에 한번 bfs -> 깨끗한 칸, 더러운칸 서로서로 간 거리를 구함 -> dfs로 순열 구해서 최솟값 구함
f가 1인 경우를 생각하지 않아서 틀렸다 처음에 이런 식으로 xans, yans 를 초기화하지 않아서 nameerror 남
달팽이 2에 비해 n의 크기가 매우 매우 커짐. 똑같이하면 메모리 초과달팽이1을 응용해봤는데 시간초과
여러가지 그래프를 씀line : 대소관계를 따져서 넣음g : index보다 작은 것의 갯수 넣음q : 작은 것부터 따질 때 쓰려고 큐
위상정렬과 dp앞에서 선행 작업의 합을 누적해서 더해준다(그 중 가장 큰 것)처음에 선행작업이 0개인 작업이 항상 1개인줄 알고 이렇게 했는데 다시 보니까 반드시 하나 이상 존재한다고 그랬다
ip 주소 입력 받음 -> 2진법으로 바꿈 -> m 값 구함 -> 2진법으로 네트워크 주소와 네트워크 마스크 구함 -> 십진법으로 바꿈처음에 이런 식으로 m 초기값 지정하지 않아서 틀림 반례2255.255.255.255255.255.255.255이고 그래서 초기값을 -
입력 받음 -> :: 부분을 찾음 -> ::부분을 늘려서 :의 갯수를 7개로 맞춤 -> ans에 g의 맨 끝에서부터 넣는데 숫자가 있으면 숫자를 넣고 없고 0을 넣어야할때(각 그룹 앞자리에 생략된 0)인 경우 :를 만나기 때문에 걍 둠(-1인채로 남는다) -> ans에
그냥 성의 좌표를 리스트에 넣어서 그 리스트에 있는 성들을 시작점으로해서 bfs 돌리는 간단한 생각으로 풀었는데 시간초과 -> 성들이 최대 1000의 제곱개 있는데 거기서 다시 일일이 bfs-> 시간초과tmp_castle 이라는 새로 추가된 성의 리스트 를 만들어서 그
처음에는 check배열을 여러 차원으로 만들거나 정보를 여러개 저장할 생각으로 한번에 bfs를 돌려서 찾겠다고 생각했는데 쉽지 않았음bfs로 찾을 수 있는 열쇠를 모두 찾는다열쇠를 찾은 후 문서를 모두 찾는다빈칸으로 테두리 한번 패딩해줌 (들락날락할 수 있도록) ->
맨처음 : 파란 구슬과 빨간 구슬을 따로 따로 check 배열을 만듬 -> 경우의 수 따지기가 어려움6 7ANS: 4게시판의 반례 이거 넣어보면 틀림구멍으로 동시에 두 구슬이 들어가는 경우 종료되는 것도 고침다시 게시판에서 찾은 반례6 6answer: 6이 반례가 또
한 줄씩 사라지는 것은 시간을 큐에 넣어서 그 칸을 다 0으로 만들어줌
다익스트라 알고리즘그래프에서 여러 개의 노드가 있을 때 특정한 노드에서 출발하여 다른 노드로 가는 각각의 최단 경로 구해줌그리디 : 매번 가장 비용이 적은 노드를 선택각 노드에 대한 현재까지의 최단 거리 정보를 리스트에 저장하여 계속 갱신\-1. 출발 노드를 설정한다.
효율성에서 하나가 틀렷다..시간초과
이미 정렬된 데이터시작, 끝점, 중간점 필요<찾으려는 데이터 & 중간점>을 반복적으로 비교재귀 or 반복문재귀를 이용한 이진 탐색반복문을 이용한 이진탐색
????!!!
시간 초과가 계속 나왔는데마지막에 남은 돈의 양이 0일때 반복문을 빠져나오게 해줘서 통과됨
선택정렬 : 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고 그 다음 작은 데이터를 선택해 앞에서 두번째 데이터와 바꿈매번 가장 작은 것을 선택한다시간복잡도 : O(N^2)삽입정렬 : 정렬되어 있는 데이터리스트에서 적절한 위치를 찾은 뒤 그 위치에 삽입특정한
앞의 문자와 현재 문자가 같은지만 따져서 경우의 수를 모두 구해주는 브루트포스 문제
시간초과 : 단순 재귀 중복되는 것들도 모두 찾음중복을 없앤 재귀
그냥 다 구해서 나중에 확인하면 오래 걸림. 되는 것만 구한다
n제한이 15라 먼저 sort해주었다 (나중에 최대 최소 ㅃㅏ르게 하려고...?)
다른 인덱스를 가진 같은 숫자가 있을 수 있음 -> 인덱스로 접근해줌
처음에 틀린 코드이유 : 영향을 받아서 익는게 동시에 일어난다고 생각해야하는데 순차적으로 일어난다고 코드를 짜서 틀림 (bfs 돌릴 때 기존의 토마토가 있던 곳은 한번에 넣고 동시에 탐색해야한다)반례 )3 3 11 1 00 0 00 0 0정답 : 3 내 출력 : 4수정
점과 점 사이가 20(맥주) \* 50(맥주 한병으로 갈 수 있는 거리) = 1000미터를 넘지 않는다고 알고 bfs로 완탐
코드 1번 : 밑의 반례 (게시판에서 주움) 와 같이 애초에 물과 관련 없이 이동 가능한 경우를 놓침10 15........X........XXXXX.X.....X.....X.X......X.S..X.X......D.X...X.XXXXXXX.X....X.........
시간초과 >>pop과 push로만 코드를 짜야함두 개의 힙을 사용한다작은 것들을 넣는 힙 (-> 최대힙으로 구성), 큰 것들을 넣는 힙 (-> 최소 힙으로 구성)1 . 두 힙의 크기가 같으면 작은 쪽으로 들어간다2 . 나머지 경우는 큰 쪽으로 들어간다 (어차피 len(
명령 1, 2룰 넣어서 bfs 돌림.처음에 명령2를 이런식으로 구현해서 메모리 초과 남. 큐에 같은 값이 너무 많이 들어가고 계속 한자리에서 돌아가는 문제가 있음. check 배열을 3차원으로 해서 방향을 넣고, 180도 회전은 2번 돌아간다고 생각해줌수정해서 이렇게
하라는 대로 ..
완전탐색 기본 문제
반례) 질문게시판에서 주움2 32 202 34 631 11
다익스트라로 최단거리를 탐색해서 그 중 탐색 가능한 곳에서 얻을 수 있는 아이템의 수의 최대값 구함플로이드 와샬도 가능해보임
다익스트라로 품 (input()쓰면 파이썬 제출할 때 시간 초과남, 입력이 몇만줄을 넘어가서 sys.stdin.readline으로 시간 줄이기 가능)플로이드 와샬 -> 메모리/시간 초과 플로이드 : O(v^3) -> 20000^3 = 8000000000000 = 8조
플로이드 와샬 : 모든 지점에서 -> 모든 지점으로의 최단경로를 구해서 출력
다익스트라로 해결, pypy 제출
bfs로 영역의 개수 구하고 / 영역 당 개수 구함
bfs로 돌려줌. 처음에는 DSLR연산을 문자열 처리 했는데 시간 초과 남.. 문자열 처리는 시간이 많이 걸리나보다....
그냥 했는데.. 이런걸 슬라이딩윈도우라는 멋진 이름으로 부른다네요...
bfs로 경계부분을 구해서 경계~경계까지 거리의 최소값을 구한다
bfs로 모든 경우를 탐색. 퍼즐을 문자열 처리해서 구해줌, 행은 몫, 열을 나머지로 이동시켜줌
1 연쇄는 1\. 터트리는 연산 : bfs로 같은 알파벳 다 찾음 -> 4개 이상이면 터트림 -> 터트릴거 없으면 종료됨2\. 중력에 의해 내려가는 연산 : 재귀로 내릴 수 있을 때까지 내린다
다른 bfs와 달리 큐를 집합으로 만들고 check배열은 만들지 않음. 모든 경우를 탐색하는데 같은 경로는 탐색하지 않기 위해 check는 안쓰고 큐를 집합으로 만들어서 중복을 피해줌
bfs를 <1. 그람이 없는 경우 2. 그람이 있는 경우> 두번 돌렸고 나눠서 코드 짬1\. 그람이 없는 경우 : 공주님에게 도착할 수 있는 경우만 최소값 연산2\. 그람이 있는 경우 : 없을 때 그람까지의 거리 + 있을 때 그람 ~ 공주까지의 거리. 이 연산은
이분탐색을 통해 풀어줌
처음에 메모리 제한 안보고 그냥 냅다 풀어서 틀렸다.힙의 길이를 고정시켜주기로 함
다익스트라 : 그래프는 만들지 않았지만 이동 가능한 곳이 정해져있어서 아래쪽을 약간 변형함. 순간이동은 가중치 0, 아닌 건 가중치 1bfs : 탐색하는데 만약 check의 값이 크다면 갱신해주었다. 그래서 최단거리를 구함while 문을 이렇게 고쳐서 가중치를 표현함.
아스키 변환과 플로이드 와샬 (모든 곳 -> 모든 곳)
처음에 잘린 랜선의 개수를 저런 식으로 풀어놔서 시간 초과 + 코드 자체도 걍 틀림잘린 랜선의 개수를 구하는 방법을 간단하게 바꿨고 계속 틀렸다길래 뭔가 했더니최소값 (l) = 0, 최대값 (r) = 100001 이런식으로 설정해서 틀림. 길이의 최소는 0이 아니라 1
다익스트라 + 이차원에서 .. 변수 중복해서 쓰지 말자
힙을 이용해서 풀었다. 힙에서 하나씩 빼서 만약 키가 더 큰 사람의 수가 같으면 임시 힙에 넣어주고 조건에 해당되는 사람들이 많아서 임시힙에 여러개가 들어가면 키가 가장 작은 것 넣고 나머지는 다시 힙에 넣어서 정렬하였다 (키가 작은 것을 넣은 이유는 다음에 키가 더
음수 있을 때 : 벨만 포드벨만 포드 정리 & 다익스트라로는 왜 안되는지도 생각
처음 짠 코드(통과) : 처음에 자기자신에게 가는 경로를 없다고 가정하고 0으로 초기화하지 않고 무한대로 두고 플로이드 와샬함아예 자기 자신으로 가는 경로를 무한대로 두고 플로이드 와샬하고 나중에 자기 자신 -> 임의의 노드 -> 자기 자신으로 가는 경로 (사이클) 중
플로이드와샬을 반대로 생각해보는 문제 주석에 생각해 볼 것들 달았음
처음에 빈칸마다 탐색해서 들어갈 수 있는 숫자 넣고 다시 탐색 반복 (시간초과)한번만 탐색하고 재귀 돌리는 것으로 바꿈 (어떤 분의 풀이 참고..)
처음에 원래 있는 도미노랑 겹치면 안되는줄 모르고 한참 헤맴... 문제를 제대로 이해해야함..
테트로미노를 모두 구하고 칸마다 넣어봄