반응형

전체 글 125

Self-supervised Learning

고양이라는 이미지가 있다고 가정해보자. 고양이 이미지에 augmentation을 주게 된다고 하더라도, 그 이미지는 고양이일 것이다. 즉, 원본 고양이 이미지와 augmentation이 적용된 고양이 이미지는 서로 유사하다고 할 수 있다. 이 때, 누군가 augmented image에 굳이 'similar'이라고 labeling 해줄 필요없이 input 데이터 자기 자신(self)에 의해 파생된 label 데이터로 학습하는 방법을 self-supervised learning이라고 한다.

[python] 2231. 분해합

문제 잘못된 풀이 N = int(input()) num_list = list() for i in range(1, N+1): num = [int(i) for i in str(i)] # print(num, sum(num)+i) # print(i) if i>=9 and sum(num)+i == N: num_list.append(i) print(min(num_list)) 해당 문제를 잘 풀었다고 생각했는데, runtime 에러가 나왔다. data type의 문제라고 생각했는데 생성자가 0일 경우의 처리를 하지 않았다. 문제점이 무엇인지 바로 파악했기 때문에, 쉽게 문제를 해결할 수 있었다. 올바른 풀이 N = int(input()) for i in range(1, N+1): num = [int(i) for i ..

[python] 2798. 블랙잭

문제 잘못된 풀이 N, M = map(int, input().split()) num = list(input().split()) result = list() for i in num[:-2]: for j in num[1:-1]: for k in num[2:]: if i==j or j==k or i==j: continue # print(i, j, k) if int(i)+int(j)+int(k) M: continue else: nlst.append(three) print(max(nlst)) 따라서 나는 삼중 for문의 범위를 다음과 같이 알맞게 설정하였고, 문제를 해결할 수 있었다. 이번 문제는 어렵지 않아서, 빠른 시간 내에 문제점을 찾고 해결할 수 있었다.

Brute Force(완전 탐색)

📍 brute force- 사전적 의미: brute(무식한) + force(힘)즉, 발생할 수 있는 모든 경우를 무식하게 탐색한다는 뜻이다.  전체를 탐색한다는 의미에서 완전 탐색이라고도 한다. 💥 brute force의 장점 - 알고리즘을 설계하고 구현하기 매우 쉽다.- 복잡한 알고리즘 없이 빠르게 구현할 수 있다.  💥 brute force의 단점- 알고리즘의 실행 시간이 매우 오래 걸린다.- 메모리 효율이 매우 비효율적이다. 💥 brute force의 종류선형구조와 비선형 구조로 나눌 수 있다.- 선형 구조: 순차 탐색- 비선형 구조: 백트래킹, DFS, BFS 💥 brute force 예시만약 5자리 비밀번호 자물쇠가 있다고 가정해보자.자물쇠를 풀기 위해 brute force 방법을 적용..

DFS와 BFS

📍 탐색 알고리즘: 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정- 그래프 탐색 알고리즘: DFS / BFS DFS와 BFS 개념 다지기 전 배경 지식 ・・  📍 stack: 가장 나중에 들어온 데이터가 가장 먼저 출력됨 (LIFO)- 스택 동작: 삽입 (append) / 삭제 (pop) stack = [5, 2, 3, 1]print(stack[::-1]) # 최상단 원소부터 출력 [1, 3, 2, 5]print(stack) # 최하단 원소부터 출력 [5, 2, 3, 1]   📍 queue: 가장 먼저 들어온 데이터가 가장 먼저 출력됨 (FIFO)- 큐 동작: 삽입 (append) / 삭제 (popleft) from collections import dequequeue = deque()queu..

[python] 1149. RGB거리

문제 잘못된 풀이 import sys n = int(input()) dp = [0] * n for i in range(n): home_list = list(map(int, sys.stdin.readline().split())) tmp = home_list[:] if i != 0: del tmp[idx] dp[i] = min(tmp) idx = home_list.index(dp[i]) print(sum(dp)) 해당 문제에서 제공한 규칙의 알고리즘은 '이전 집과 색깔이 겹치지 않으면' 된다. 따라서 내가 (잘못) 생각한 방법은 다음과 같다. 첫번째 집: 일단 첫번째 집에서 가장 작은 값을 찾는다. 그 다음 집과 색깔이 겹치지 않도록 index를 찾아 저장한다. 두번째 집 ~ : 앞 집의 index를 제외한..

[python] 1912. 연속합

문제 올바른 풀이 n = int(input()) num_list = list(map(int, input().split())) for i in range(1, n): num_list[i] = max(num_list[i-1] + num_list[i], num_list[i]) print(max(num_list)) 해당 문제는 다이나믹 프로그래밍으로 해결할 수 있다. 최댓값을 구하기 위한 풀이방법은 다음과 같다. i번째까지의 수를 더한 값보다 i번째 값이 크면 그 이전 값은 무시한다. 즉, i번째까지의 누적값이 i번째보다 작으면 계속해서 더해가지만 i번째 값이 크면 누적값을 무시하고 i번째부터 다시 값을 더해간다고 이해하면 될 것 같다.

[python] 1904. 01타일

문제 잘못된 풀이 (런타임에러, 메모리초과) N = int(input()) dp = [0] * (N+1) dp[1] = 1 dp[2] = 2 for i in range(3, N+1): dp[i] = dp[i-1] + dp[i-2] print(dp[N] % 15746) 해당 코드로 작성하면 런타임에러와 메모리초과가 발생한다. 파이썬은 int형의 고정된 크기가 아니다. 그 변수가 실제로 담고 있는 값의 크기에 따라, 유동적으로 사용하는 메모리가 변한다. 수가 매우 커지게 되면 그 수를 정확하게 표현하기 위해 점점 더 많은 메모리를 할당받게 되는데, 해당 문제의 경우 무턱대고 모든 항의 값을 다 구하려고 하면 N에 비례하여 자릿수가 점점 늘어나기 때문에 총 사용하게 되는 공간 복잡도가 O(N^2)가 된다. 배..

[python] 9184. 신나는 함수 실행

문제 올바른 풀이 import sys def w(a, b, c): if a 20: return w(20, 20, 20) if dp[a][b][c]: # 이미 구한 값 이라면 바로 출력 return dp[a][b][c] if a < b and b < c: dp[a][b][c] = w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) else: dp[a][b][c] = w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1) return dp[a][b][c] dp = [[[0]*(21) for _ in range(21)] for _ in range(21)] while True: a, b, c = map(int, sys.s..

[python] 1004. 어린왕자

문제 올바른 풀이 T = int(input()) for i in range(T): cnt = 0 x1, y1, x2, y2 = map(int, input().split()) # 출발점과 도착점 n = int(input()) for i in range(n): c1, c2, r = map(int, input().split()) # 행성계 중점과 반지름 d1 = (((x1 - c1) ** 2) + ((y1 - c2) ** 2)) ** 0.5 d2 = (((x2 - c1) ** 2) + ((y2 - c2) ** 2)) ** 0.5 # 둘 다 속하거나 둘 다 속하지 않으면 진입이나 이탈할 필요 없음 if (d1 r) or (d1 > r and d2 < r): cnt += 1 # 하나는 속하..

728x90
반응형