본문 바로가기
[백준][파이썬] 10819 차이를 최대로 모든 순열를 구한 방법으로 아래코드처럼 구현했더니, 시간초과가 났다. 다른 풀이들을 보니, itertools를 이용해서 구했던데, 실제 코테에서 itertools를 못쓴다는 말이 있어서 고민이 많다. num = int(input()) lit =list(map(int,input().split())) lit.sort() def go(lit): total =0 for i in range(0,num-1): cnt = lit[i] - lit[i+1] if cnt0 and lit[i-1] > lit[i]: i -= 1 if i == 0: return 0 t = go(lit) if ans lit[j] and j>0: j -= 1 lit[i-1],lit[j.. 2020. 4. 5.
[백준][파이썬] 10974 모든 순열 "다음 순열" 방식을 이용해서 코딩을 했다. 하지만 아직 남은 의문이 있다.. 왜 len(lit) == 2를 continue를 추가로 작성해줘야하는지 의문이다. lit가 2일때 넘겨주면 len(lit)에서 타입에러가 발생하여 저렇게 처리해주긴했지만, 왜그런지는 아직 에러를 못잡았다. num = int(input()) def per(lit): n = len(lit)-1 i = n while i>0 and lit[i-1] > lit[i]: i -= 1 if i == 0: return 0 print(*lit) j = n while lit[i-1] > lit[j] and j>0: j -= 1 lit[i-1],lit[j] =lit[j],lit[i-1] j = n while i < j: lit[i] ,lit[j] .. 2020. 4. 5.
[CS231n] 2강 이미지 처리는 어떻게 해야할까? 이 강의에서 말하려는 핵심은 "이미지 처리를 하는데 어려웠다." 하지만 해결책으로 "Linear Classification" 을 활용한다. [1] Nearest Neighbor 모든 데이터와 라벨을 입력시키고, 이와 유사한 라벨을 찾아 (분산,표준편차의 개념을 활용) 가까운 쪽이 정답이라고 말하는 방법이다. 한계)) 학습을 하는것은 매우 빨랐다. 하지만 예측을 하는것이 오래걸렸다. 이유는 데이터 마다 뺴고 제곱을 해주는 계산을 해줘야하는데, 하나 예측하는데 너무 많은 시간이 걸린다. 사실, 학습시키는것은 오래걸려도 상관없다. 하지만 예측이 오래걸리는것은 의미가 없는 일이다. [2] K-Nearest Neighbors (향후 추가) 전체 데이터가 아닌 일부 근처에 있는 데이터를 활용하는것 같다. 하지만, .. 2020. 4. 3.
공부 방법 및 블로그 활용 방법 CS231n을 한번에 모두 이해하려는 생각보다는 조금씩 조금씩 이해하는 방법으로 하려고 합니다. "정독"보단 "다독"을 목표로 하면서 학습내용에 살을 덧붙일 예정입니다. 모든 내용을 작성한다면 좋겠지만, 시간관계상 각 강의 별로 무엇을 알았는지 "목차"처럼 나열하는 정도만 작성을 하려고 합니다. 나중에 복습하면서 내용을 채워나갈 예정입니다. 2020. 4. 3.
[백준][파이썬] 11403번: 경로찾기 BFS문제 BFS 문제인 이유: 인접 행렬들을 하나씩 True 해나가는 과정이기떄문. 사실 DFS로 풀어도 될것같긴하다 어차피 False처리를 계속 해주기때문에 메모리나 시간에 있어서도 비슷할것 같다는 생각이 든다. 핵심은 1. 초기값 dfs안에 한번에 stack변수에 저장(배추문제에서도 했다.) 2. collection 이용하여 시간단축 복잡하지 않은 문제였다. import collections num = int(input()) lit =[] visited = [[False for i in range(num)] for j in range(num)] for i in range(num): t = list(map(int,input().split())) lit.append(t) def dfs(stack): stack =.. 2020. 4. 2.
[백준][파이썬] 10973 이전순열 [핵심] 다음 순열과 원리가 반대이다 1. 왼쪽이 큰경우를 찾아주기 2. 그 수 보다 오른쪽에 있는 그 보다 작은 수 찾기 3. 두 개의 숫자 바꾸고 오름차순 정렬 *오름차순 정렬을 할때 이중포문을 해서 하면 시간초과가 난다. 대신 순열 특성상 이미 내림차순이 되어있다는 점을 활용하여 while문으로 뒤집어주면 된다. 사실 위에 말한 내용을 이해하려고 하면 쉽지 않을것이다. 로직을 스스로 작성하면서 봐야지 이해가 쉽다. num = int(input()) lit = list(map(int,input().split())) def recu(lit): n = len(lit) -1 i = n-1 while lit[i] 2020. 4. 2.
[백준][파이썬] 10972 다음순열 https://statssy.github.io/pro/2019/09/03/baekjoon_10972/를 참고했다. [백준 문제] P10972 다음 순열(파이썬) [백준 문제] P10972 다음 순열(파이썬) statssy.github.io def next_permutation(a): n = len(a) - 1 i = n while i > 0 and a[i-1] >= a[i]: i -= 1 if i == 0: # 마지막 순열 return False j = n while a[i-1] >= a[j]: # 오른쪽에 있으면서 a[i-1]보다 큰 수 j -= 1 a[i-1], a[j] = a[j], a[i-1] # SWAP j = n while i < j: a[i], a[j] = a[j], a[i] # a[i]부터.. 2020. 4. 2.
[백준][파이썬] 7569 토마토(2) - 3차원 [핵심] 3차원 리스트를 활용하고 index를 맞게 조절해주느라 조금 헷갈렸다. 나는 기본적으로 z축을 먼저 정렬하여 [z][x][y]구조로 생각했다. 최단거리 문제는 BFS가 어울린다. 왜냐하면 동시에 카운팅을 해주어야 하니까. *한번에 stack를 모두 처리하기 위해 while안에 포문을 한번더 설정해준것. *초기값 모두 한번에 해결하기 위해 dfs안 while밖에 포문으로 stack에 넣어준것 이 핵심이였다. 꼭 반복 연습하자 import collections #dq를 활용 m,n,h = map(int,input().split()) total =[] for i in range(h): lit =[] for j in range(n): t = list(map(int,input().split())) lit.. 2020. 4. 1.
[백준][파이썬] 2178 미로탈출 (최단거리) 처음에는 DFS문제라고 생각했다. 미로를 찾아가면서 결국 (M,N)에 도착한 값들을 list에 넣어주고 정렬시켜준다음에 최소값을 찾으면 되니까!! 결과는 잘 나왔다. 하지만 시간초과가 났다. 이런 최단거리 문제를 푸는 방법은 BFS라고 한다. 처음에 어떻게 하면 최단길을 찾을 수 있을지 고민했다. (왠지 동적프로그래밍에 더 가까워지는듯한....) 답은 생각보다 간단했다. 모든 블록에 값을 넣어주는것..(수학 문제풀떄랑 비슷했다.) 사용한 리스트가 꽤 많았다. visited - 방문여부 파악을 위해 사용 lit - 기존의 정보가 담겨있는 리스트 추가로 거리를 담아주는 리스트가 사용되었다. dlog- 흔적을 남기는 배열이다. DFS는 주로 재귀함수와 스택을 BFS는 주로 while문과 큐를 사용한다. n,m.. 2020. 3. 30.