kbsu147의 등록된 링크

키자드에 등록된 총 179개의 포스트를 확인하실 수 있습니다.

Naver Blog

[백준 12865] 평범한 배낭

https://www.acmicpc.net/problem/12865 문제이해 가방에 최대 넣을 수 있는 무게 K, 각 물건의 무게 W, 가치 V가 주어졌을 때 가방에 담을 수 있는 최대 가치를 구해라. 풀이 주어진 조건에서 모든 경우의 수를 DFS나 BFS로 탐색한다면 연산량이 많아 시간 초과가 날 것이다. 그래서 DP로 접근했다. 처음에는 1차원 배열을 사용했다. 그러나 이 경우 같은 물건을 중복해서 넣는 오류가 발생했다. 예를 들어 K는 3이고 1, 5의 물건만 있다고 했을 때 입력: 1 3 1 5 가방의 무게 0 1 2 3 (1,5 입력) DP배열 0 5 0 0 가방의 무게 0 1 2 3 (1,5 입력) DP배열 0 5 10 0 가방의 무게 0 1 2 3 (1,5 입력) DP배열 0 5 10 15 이런식으로 업데이트되어 15를 출력한다. 그래서 가방의 무게 0 1 2 3 4 5 6 7 (6,13 입력) DP배열 0 0 0 0 0 0 13 13 (4,8 입력) DP배열 0 0 0

Naver Blog

[백준 16197] 두 동전

https://www.acmicpc.net/problem/16197 문제이해 NxM 크기의 보드에서 동전을 이동한 후 하나만 보드에 남길 수 있는 최소 이동 횟수를 출력하라. 풀이 코드 import sys from collections import deque dy=[0,1,0,-1] dx=[1,0,-1,0] N, M = map(int, sys.stdin.readline().split()) board = [[] for _ in range(N)] coin = [] for i in range(N): s = sys.stdin.readline().strip() for j in range(len(s)): board[i].append(s[j]) if s[j] == 'o': coin.append(i) coin.append(j) visited = set() visited.add((coin[0],coin[1],coin[2],coin[3])) coin.append(0) d = deque() d.appe

Naver Blog

[백준 16930] 달리기 (복습)

https://www.acmicpc.net/problem/16930 문제이해 NxM 크기의 체육관이 있을때 (x1,y1)에서 (x2,y2)로 가는 최소 시간을 출력하라. 풀이 벽을 벗어나거나 벽을 만나면 break 방문하지 않았던 길이면 큐에 삽입 방문했던 길이면서 현재 시간보다 작거나 같으면 break 코드 from collections import deque import sys dy = [1,0,-1,0] dx = [0,1,0,-1] N, M, K = map(int, sys.stdin.readline().split()) board = [list(sys.stdin.readline().strip()) for _ in range(N)] dp = [[0] * M for _ in range(N)] x1, y1, x2, y2 = map(int, sys.stdin.readline().split()) if x1 == x2 and y1 == y2: print(0) exit() d = deque(

Naver Blog

[백준 3568] iSharp

https://www.acmicpc.net/problem/3568 문제이해 여러 개의 변수를 한 줄로 선언할 때 조건에 맞추어 변수당 한 줄로 선언하는 문제. 풀이 코드 import sys s = sys.stdin.readline().split() for i in range(len(s) - 1): now_s = s[i+1] now_s = now_s[:-1] chk = False for j in range(len(now_s)): if not now_s[j].isalpha(): new_s = now_s[j:] new_s = new_s[::-1] new_s = list(new_s) for k in range(len(new_s)): if new_s[k] == ']': new_s[k] = '[' elif new_s[k] == '[': new_s[k] = ']' new_s = "".join(new_s) s[i+1] = new_s+ " " +now_s[0:j] chk = True break if

Naver Blog

[백준 16506] CPU

https://www.acmicpc.net/problem/16506 문제이해 주어진 명령어의 구조를 보고 어셈블리어를 기계어 코드로 번역하는 문제 풀이 먼저 opcode의 마지막에 C가 포함되어 있는지를 확인해서 4번째 자릿수를 채운다 그리고 rB를 위해 이진수로 바꾸는 함수에서 max 값의 파라미터를 추가해 3자리로 나타내야 하는지 4자리로 나타내야 하는지를 입력받는다. 코드 import sys N = int(sys.stdin.readline()) def bi(num, max): ans = "" while (num // 2) != 0: ans = str(num % 2) + ans num=num // 2 ans = str(num % 2) + ans while len(ans) < max: ans = "0" + ans return ans for _ in range(N): s = sys.stdin.readline().split() ans = "" if "ADD" in s[0]: ans +

Naver Blog

[백준 14502] 연구소

https://www.acmicpc.net/problem/14502 문제이해 NxM의 직사각형에서 벽을 3개 세우고 바이러스가 확산했을 때 바이러스의 확산이 없는 안전 구역의 최댓값을 구하라. 풀이 벽 세우기 바이러스 퍼트리기 0의 개수 찾기 코드 import sys from collections import deque import copy N, M = map(int, sys.stdin.readline().split()) board = [] wall=[] virus=[] dy=[0,1,0,-1] dx=[1,0,-1,0] ret = 0 for _ in range(N): board.append(list(map(int, sys.stdin.readline().split()))) for i in range(N): for j in range(M): if board[i][j] == 0: wall.append((i,j)) elif board[i][j] == 2: virus.append((i,j))

Naver Blog

[백준 3197] 백조의 호수

https://www.acmicpc.net/problem/3197 문제이해 RxC 개의 칸으로 이루어진 호수 위의 두 마리 백조가 만날 수 있게 되는 날을 구하라. 물과 접촉하는 빙판은 다음날 녹는다. 풀이 처음으로 접근한 방법은 백조끼리 만나기 녹일 빙판 찾기 빙판 녹이기 이렇게 접근했다. 그러나 하루마다 백조를 처음 위치에서 출발시키고 물과 빙판의 경계를 확인했다. 이 방법은 시간 초과가 발생했다. 구현 문제라서 조건대로만 구현하면 될 줄 알고 시간 복잡도를 계산하지 않은 게 큰 실수였다. 호수가 전부 빙판으로 덮여있다면 1500x1500의 호수에서는 상당히 많은 시간이 걸렸다. 처음에는 질문 게시판을 보고 이미 방문한 곳을 다음날에는 방문하지 않게 하는 방법으로 풀어야 한다는 것을 알았지만 아이디어가 떠오르지 않아서 결국 구글링해서 참고를 했다. https://velog.io/@yoopark/baekjoon-3197 두 개의 큐를 사용하는 것은 처음이었다. 코드 import s

Naver Blog

[백준 5557] 1학년

https://www.acmicpc.net/problem/5557 문제이해 N 개의 숫자가 주어졌을 때 +와 -를 사용해서 첫 번째 수부터 N-1 번째까지의 수를 연산한 결과가 마지막 N 번째 수와 같아지는 올바른 등식의 개수를 구해라. 풀이 N의 가장 큰 수가 100이기 때문에 최악의 상황의 모든 경우의 수는 2의 100 제곱이 되기 때문에 완전 탐색은 힘들다. 이런 식으로 손으로 풀다 보면 각 단계에서 겹치는 수들이 생기게 되고 이 조건은 1) Overlapping Subproblems(겹치는 부분 문제) 2) Optimal Substructure(최적 부분 구조) 여기에 만족한다. 그래서 DP로 풀기로 하고 dp[k + num_list[i]][i] = dp[k][i-1] + dp[k + num_list[i]][i] 이렇게 점화식을 만들어서 풀었다. 코드 import sys N = int(sys.stdin.readline()) num_list = list(map(int,sys.s

Naver Blog

[백준 9470] Strahler 순서

https://www.acmicpc.net/problem/9470 문제이해 유향 그래프에서 in-degree가 0인 노드의 순서가 1이라고 하고 나머지 노드의 순서를 문제에 주어진 조건으로 나타낼 때 바다와 만나는 노드의 순서를 구하라. 풀이 처음에는 조건에 맞춰서 DFS로 풀려고 했으나 예외 처리가 힘들어 결국 구글링을 했다. 위상 정렬로 풀어야 하는 것을 알게 되었고 위상 정렬을 공부한 지 오래되어서 아마 안 봤다면 못 풀었을 것 같다. 먼저 indegree = [[0,0,0] for _ in range(M+1)]의 리스트를 만들어 [indegree, 순서, 해당 순서로 들어온 노드의 개수]를 활용해 문제의 조건을 만족하면서 문제를 풀 수 있었다. 코드 import sys from collections import deque, defaultdict T = int(sys.stdin.readline()) for _ in range(T): K, M, P = map(int, sys.st

Naver Blog

[백준 2644] 촌수계산

https://www.acmicpc.net/problem/2644 문제이해 n 명의 사람이 존재할 때 주어진 조건을 보고 두 사람의 촌수를 구하라. 친척 관계가 아니라면 -1 출력. 풀이 그래프로 그렸을 때 하나의 간선은 1촌을 의미한다. 불필요한 변수의 사용이나 효율성을 위해서 단방향 그래프로 해결해 볼 수 있을까 고민했는데 7에서 3으로 갈 때 부모 방향으로 갔다가 다시 자식 방향으로 내려와야 해서 불가능하다고 판단하고 양방향 그래프로 풀었다. (BFS 활용) 코드 import sys from collections import deque n = int(sys.stdin.readline()) f,s = map(int,sys.stdin.readline().split()) m = int(sys.stdin.readline()) graph = [[False]*(n+1) for _ in range(n+1)] visited = [False] * (n+1) for _ in range(m): a

Naver Blog

[백준 7569] 토마토

https://www.acmicpc.net/problem/7569 문제이해 MxN 크기의 상자가 H 층으로 쌓여있고 각 칸은 익지 않은 토마토, 익은 토마토, 빈칸으로 채워져있다. 하루마다 익은 토마토 주변으로 토마토들이 익어가며 상자에 있는 모든 토마토가 익은 날짜는 언제인지 구하기, 모든 토마토가 익을 수 없다면 -1 출력. 풀이 3차원 배열과 set을 사용해 풀었다. 코드 import sys from collections import deque M, N, H = map(int, sys.stdin.readline().split()) dy=[0,1,0,-1,0,0] dx=[1,0,-1,0,0,0] dh=[0,0,0,0,1,-1] box_list = [] d = deque() s = set() empty = 0 for i in range(H): tmp = [] for j in range(N): l = list(map(int, sys.stdin.readline().split())) t

Naver Blog

[백준 2573] 빙산

https://www.acmicpc.net/problem/2573 문제이해 NxM의 크기의 바다에 빙산이 떠있다. 빙산의 높이는 숫자로 나타나 있고 매년 바다에 접한 면의 개수만큼 빙산의 크기가 줄어든다. 빙산이 두 덩어리로 나눠지는 데 몇 년이 걸리는지 출력하라. 풀이 덩어리 개수 확인 빙산 녹이기 코드 import sys from collections import deque N, M = map(int, sys.stdin.readline().split()) board = [] dy = [1,0,-1,0] dx = [0,1,0,-1] for _ in range(N): s = list(map(int, sys.stdin.readline().split())) board.append(s) cnt = 0 while True: visited = [[False]*M for _ in range(N)] bing = 0 for i in range(N): for j in range(M): if boar

Naver Blog

[코드트리] 미지의 공간 탈출

풀이 BFS로 구현하고 go라는 함수를 만들어 날짜가 바뀔 때랑 이동할 때만 호출해서 푸는 방법을 선택했다. go 함수에서 미지의 공간과 시간의 벽을 이동할 때 예외 처리해야 할 부분이 많아서 계속 index error가 났었다. 코드 import sys from collections import deque miji_board = [] dong = [] seo =[] nam = [] buk = [] top = [] isang = [] dy=[0,0,1,-1,0] dx=[1,-1,0,0,0] #--- 입력 받는 부분 N, M, F = map(int, sys.stdin.readline().split()) for _ in range(N): miji_board.append(list(map(int, sys.stdin.readline().split()))) for i in range(5): for _ in range(M): if i == 0: dong.append(list(map(int, sy

Naver Blog

[코드트리] 코드트리 DB

코드 import sys entry_count = 0 name_to_index = {} used_values = set() names = ["" for _ in range(100005)] values = [0 for _ in range(100005)] class SegmentTreeNode: def __init__(self): self.left=0 self.right=0 self.index = 0 self.count = 0 self.sum = 0 segment_tree=[] def update(node_id, left, right, position, index, count, sum): if right < position or position < left: return if left == right: segment_tree[node_id].index = index segment_tree[node_id].count = count segment_tree[node_id].sum = sum

Naver Blog

[백준 23290] 마법사 상어와 복제

https://www.acmicpc.net/problem/23290 문제이해 풀이 문제의 작업을 확인하고 처음에는 dict랑 1차원 배열로 접근했었다. 1차원 배열에는 물고기의 (y,x,direction)을 저장하고 dict에서 (y, x) 위치의 물고기 수를 저장했다. (상어가 이동할 때 최대로 많은 물고기를 잡는 경우를 계산하기 위해) 그러나 물고기가 이동하고 상어한테 잡혀서 물고기 위치 이동과 dict의 갱신이 싱크가 맞지않아서 고민하다가 결국 구글링해서 다른 풀이들을 봤다. 3차원 배열을 사용해서 (y, x)의 있는 물고기의 direction을 저장하는 방법이 있어 이것을 사용했고 기존 코드에서 수정하는 과정에서 DFS에서 마지막 상어의 위치를 결정할 때 visit으로만 방문 여부를 확인했기 때문에 (2.2) → (2.3) → (2.2) 이와 같은 경로를 이동하면 (2.2) → (2.3) 2개의 위치만 남게 되었고 이를 DFS 후에 반영하니 (2.3)이 마지막 위치가 되었다.

Naver Blog

[백준 21611] 마법사 상어와 블리자드

https://www.acmicpc.net/problem/21611 풀이 코드 import sys from collections import deque import copy N, M = map(int, sys.stdin.readline().split()) board = [] dy=[0,-1,1,0,0] dx=[0,0,0,-1,1] c = (int((N+1)/2-1),int((N+1)/2-1)) for _ in range(N): board.append(list(map(int, sys.stdin.readline().split()))) # print(board[c[0]][c[1]]) to_idx = {} d = deque() d.append((c,3,0,1)) # 지금위치, 방향, 현재간횟수, 최종가는횟수 ball_list=[] ball_list.append(0) idx = 0 while d: now, dir, now_num, last_num = d.popleft() to_idx[now]

Naver Blog

[백준 14503] 로봇 청소기

https://www.acmicpc.net/problem/14503 풀이 코드 import sys N,M = map(int,sys.stdin.readline().split()) board = [] visited = [[False] * M for _ in range(N)] dy = [-1,0,1,0] dx = [0,1,0,-1] ry, rx, rd = map(int,sys.stdin.readline().split()) for _ in range(N): board.append(list(map(int,sys.stdin.readline().split()))) ret = 0 while True: if visited[ry][rx] == False: visited[ry][rx] = True ret += 1 # for i in range(len(visited)): # print(visited[i]) # print(rd) # print() for i in range(4): nry, nrx = ry+

Naver Blog

[코드트리] 메이즈 러너

풀이 코드 import sys N,M,K = map(int,sys.stdin.readline().split()) board = [] dy=[-1,1,0,0] dx=[0,0,-1,1] M_list = [] for _ in range(N): board.append(list(map(int,sys.stdin.readline().split()))) for _ in range(M): f,s = map(int,sys.stdin.readline().split()) M_list.append((f-1,s-1)) f,s = map(int,sys.stdin.readline().split()) exit = (f-1,s-1) # print(board) # print(M_list) ret = 0 for _ in range(K): if len(M_list) == 0: break # 참가자 이동 new_M_list = [] for y,x in M_list: now_len = abs(exit[0]-y)+abs(ex

Naver Blog

[백준 21608] 상어 초등학

https://www.acmicpc.net/problem/21608 문제이해 주어진 조건으로 NxN 크기의 교실에 학생들의 자리를 배치하기 풀이 1번과 2번 조건을 위해 maxf, maxe를 선언해 주었다. 그리고 3번 조건을 만족시키기 위해 초과와 미만을 사용했다. 코드 import sys N = int(sys.stdin.readline()) dic = {} board = [[0] * N for _ in range(N)] dy = [1,0,-1,0] dx = [0,1,0,-1] dic = {} for _ in range(N*N): stu_num, f1,f2,f3,f4 = map(int,sys.stdin.readline().split()) # print(stu_num,f1,f2,f3,f4) dic[stu_num] = [f1,f2,f3,f4] place = 0 maxf = -1 maxe = -1 for i in range(N): for j in range(N): if board[i][

Naver Blog

[SWEA 24001] 로봇 언어

풀이 일반적인 구현 문제라 생각해서. 처음에 BFS로 풀었으나 런타임 에러가 났다. 큐에 너무 많은 값이 들어가서 그런 것 같다. 결국 DP로 풀어야겠다고 생각했다. DP로 풀 때도 마지막에 원점에서 가장 떨어진 값을 찾았으나 147개의 문제만 맞고 4개가 틀렸었다. 아마 음수를 처리하는 부분에서 문제가 있는 것 같다. 그러나 다음 인덱스를 체크하면서 바로바로 max 값을 바꿔주니 정답을 맞힐 수 있었다. 코드 # 기본 제공코드는 임의 수정해도 관계 없습니다. 단, 입출력 포맷 주의 # 아래 표준 입출력 예제 필요시 참고하세요. # 표준 입력 예제 ''' a = int(input()) 정수형 변수 1개 입력 받는 예제 b, c = map(int, input().split()) 정수형 변수 2개 입력 받는 예제 d = float(input()) 실수형 변수 1개 입력 받는 예제 e, f, g = map(float, input().split()) 실수형 변수 3개 입력 받는 예제 h =

Naver Blog

[코드트리] 포탑 부수기

풀이 조건을 하나하나 확인하면서 작성했는데 결국 BFS의 우선순위와 "공격자는 해당 공격의 영향을 받지 않습니다." 이 한 문장을 간과해서 1시간 동안 디버깅을 했다. 코드 import sys from collections import deque N, M, K = map(int,sys.stdin.readline().split()) board = [] dy=[0,1,0,-1] dx=[1,0,-1,0] p_dy=[1,1,1,0,0,-1,-1,-1] p_dx=[1,0,-1,1,-1,1,0,-1] for _ in range(N): l = list(map(int,sys.stdin.readline().split())) new_list = [] for i in (l): new_list.append([i,0]) board.append(new_list) for K_num in range(K): # 공격자 선정 att_w = 0 att_min = 55555 att_last = -1 ijsum = -1

Naver Blog

[코드트리] 메두사와 전사들

풀이 코드 from collections import deque N, M = map(int, input().split()) sy, sx, ey, ex = map(int, input().split()) m_f_list = list(map(int, input().split())) m_list = [] board=[] for i in range(M): m_list.append((m_f_list[2*i], m_f_list[2*i+1])) for _ in range(N): board.append(list(map(int, input().split()))) dy=[-1,1,0,0] dx=[0,0,-1,1] s_min_list = 0 # print(m_list) visited = [[False] * N for _ in range(N)] d = deque() d.append((sy,sx,[])) visited[sy][sx] = True while d: y, x, now_list = d.popleft

Naver Blog

datetime 사용법

1. 데이터 불러오기 먼저 pandas를 import 하고 pd.read_csv를 사용해 처리하고자 하는 csv 파일을 불러온다. 2. datatime의 dtype 확인 현재 datetime column의 dtype이 object인 것을 확인할 수 있다. 3. object를 Datetime으로 변환: to_datetime() pandas에서는 문자형, 숫자형 등의 데이터 타입뿐만 아니라 'Datetime'이라는 데이터 타입도 있다. 따라서 to_datetime() 함수를 사용해 날짜 형태로 바꿔줌. 4. 년, 월, 일, 시, 분, 초, 요일 추출: .dt.year / month / day / hour / minute / second / dayofweek .dt를 활용하여 datetime column에 있는 값을 년, 월, 일 등으로 뽑아 새로운 columns 생성.

Naver Blog

LangChain을 활용한 Agent 구축

1. 라이브러리 설치 pip install python-dotenv python-dotenv langchain-openai langchain-community google-search-results numexpr 2. env 파일 생성 및 API 키 저장 루트 디렉토리에 .env 파일을 생성하고 OPENAI_API_KEY=OPENAI API 키 입력 SERPAPI_API_KEY=SERPAPI API 키 입력 3. 코드 작성 agent_example.py 파일 생성 후 코드 입력 # agent_example.py import os from dotenv import load_dotenv from langchain_openai import OpenAI from langchain.chains import LLMMathChain from langchain_community.utilities import SerpAPIWrapper from langchain.agents import initia

Naver Blog

<갤럭시 온디바이스 AI>_2024.05.08

헤드라인 [갤럭시 언팩] "온디바이스 AI 폰 구현 해낸 비결은 'LLM 경량화'" 기사링크 https://www.newspim.com/news/view/20240119000974 본문 (본문 내용 복사) 모바일 내에서 구동할 수 있는 LLM 경량화 기술 연구 사용자가 AI 기능 사용 여부 선택 가능 디바이스 확장한 갤럭시 생태계 시사 [새너제이(캘리포니아)=뉴스핌] 조수빈 기자 = 갤럭시S24의 주요 인공지능(AI) 기능인 실시간 통화 통역, 챗 어시스트나 노트어시스트 기능의 뒤엔 거대언어모델(LLM)이 숨어있다. 많은 데이터와 메모리를 필요로 하는 거대언어모델을 어떻게 모바일이라는 한정된 공간에서 구동하게 만들었을까. 김영집 삼성전자 MX사업부 랭귀지 AI 팀장(부사장)은 18일(현지시간) 미국 캘리포니아 실리콘밸리에 위치한 삼성리서치센터에서 갤럭시 AI 개발 배경에 대해 설명하고 있다. [사진=삼성전자] 삼성전자는 삼성의 자체 LLM인 '삼성가우스'의 일부 기능을 경량화 한 갤

Naver Blog

<아이폰 vs 갤럭시 … 생성형 AI 대리전>_2024.05.17

헤드라인 '아이폰 vs 갤럭시'···생성형 AI 대리전 열린다 기사링크 https://www.seoulfn.com/news/articleView.html?idxno=519608 본문 (본문 내용 복사) 챗GPT 업은 아이폰, 제미나이 업은 갤럭시···내년초 본격 대결 AI폰 시장 2027년 5억2200만대 확대···AI 성능이 운명 가를 듯 아이폰의 AI 비서 '시리'에 탑재가 유력한 챗GPT. (사진=연합뉴스) [서울파이낸스 여용준 기자] 삼성 갤럭시와 애플 아이폰의 스마트폰 패권 경쟁이 생성형 AI의 대리전으로 확대되고 있다. 애플이 챗GPT의 개발 기업인 오픈AI와 협력할 것으로 알려지면서 구글 제미나이를 탑재한 갤럭시 S 시리즈와 경쟁구도를 만들게 됐다. 13일 블룸버그와 뉴욕타임스 등 주요 외신에 따르면 애플과 오픈AI가 차기 아이폰 운영체제인 애플의 iOS18에서 챗GPT 기능을 사용하기 위한 계약 조건을 마무리하고 있다. 이에 따라 다음달 열리는 세계개발자콘퍼런스(WWD

Naver Blog

<카카오, 올해 AI에 1500억원 투자>_2024.05.23

헤드라인 카카오, 올해 AI에 1500억원 투자…AI 드라이브 '시동' 기사링크 https://www.etnews.com/20240513000003 본문 (본문 내용 복사) 카카오가 올해 인공지능(AI) 기술개발과 서비스 출시를 위해 1500억원을 투자한다. AI 기술 테스트베드 성격의 'AI 플레이그라운드'에는 외부 기업까지 참여하도록 구성될 전망이다. 카카오는 내달 3일 카카오브레인 통합을 완료하면서 효율적인 AI 기술·서비스 개발에 집중한다. 연내 '카카오표' AI 서비스가 본격적으로 공개될 것으로 기대된다. 12일 정보기술(IT) 업계에 따르면 카카오는 올해 AI 기술과 서비스 개발 등을 위해 1500억원 투자를 단행할 계획이다. 카카오가 지난해 AI 투자 금액으로 1255억원을 집행한 것을 감안하면 약 19.5%를 증액한 수치다. 정신아 카카오 대표는 지난 9일 컨퍼런스 콜에서 AI 사업의 구체적인 방향성에 대해 밝힌 바 있다. 카카오는 구체적으로 카카오와 카카오브레인 AI

Naver Blog

<삼성 웨어러블 생태계>_2024.05.30

헤드라인 링·워치·핏·로봇...'연결 생태계' 삼성의 차별화 무기 기사링크 https://it.chosun.com/news/articleView.html?idxno=2023092116604 본문 (본문 내용 복사) 삼성전자가 웨어러블 기기 라인업 확대에 강한 드라이브를 건다. 갤럭시워치와 갤럭시핏에 이어 하반기 갤럭시링, 웨어러블 로봇 ‘봇핏’ 등 출시를 준비한다. 웨어러블 신제품·폼팩터 확대를 통해 ‘갤럭시 생태계’를 강화하려는 목적이다. 웨어러블 제품은 이용자 일상 정보 수집이 용이한 만큼 헬스케어 사업뿐 아니라 가전 사업에서도 시너지를 발휘할 것으로 기대한다. 세계 최대 이동통신 전시회 '모바일 월드 콩그레스(MWC) 2024'가 개막한 2월 26일(현지시간) 스페인 바르셀로나 피라 그란 비아 전시장 삼성전자 부스에 갤럭시 링이 공개되고 있다. / 뉴스1 28일 업계에 따르면 삼성전자는 올해 하반기 프랑스 파리에서 열리는 ‘갤럭시 언팩’ 행사에서 갤럭시Z플립·폴드6와 함께 갤럭

Naver Blog

<AI를 활용한 디지털 치료제>_2024.06.10

헤드라인 우울증·불안장애·ADHD도 AI로 치료한다 기사링크 https://n.news.naver.com/mnews/article/366/0000997355 본문 (본문 내용 복사) 정신과 치료를 스마트 기기 앱으로 구현 맞춤형 치료 제시, AI 게임으로 집중력 높여 지난 4월 일본 오츠카 제약과 미국 클릭 테라퓨틱스가 공동 개발한 앱(app, 응용프로그램) ‘리조인(Rejoyn)’이 첫 우울증 디지털 치료제로 미국 식품의약국(FDA)에서 승인받았다. 디지털 치료제는 질병을 치료하고 관리하는 소프트웨어를 말한다. 리조인은 화면에 나타나는 얼굴 표정에서 감정을 추측하는 인지기능 훈련과 사물을 잡는 방법을 수정함에 따라 증상을 개선시키는 인지행동요법을 조합했다. 최근 국내 의료진과 스타트업들이 인공지능(AI) 기술을 이용해 실제 병원에서 이뤄지는 치료법을 구현한 정신질환 디지털 치료제들을 속속 개발했다. 지금까지 AI는 주로 질환을 조기 진단하거나 고위험군을 예측했지만, 이제는 정신질환

Naver Blog

[프로그래머스] N으로 표현

https://school.programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. 제한사항 N은 1 이상 9 이하입니다. number는 1 이상 32,000 이하입니다. 수식... school.programmers.co.kr 문제이해 먼저 문제의 입출력 예시를 보면서 55/5 + 5/5의 예시와 (55+5) / 5의 예시를 보면서 NN/N = 11과 N/N= 1을 적절히 조합해서 1

Naver Blog

[백준 2696] 중앙값 구하기

https://www.acmicpc.net/problem/2696 문제이해 수열을 읽으면서 홀수번째 수를 읽을때 현재까지 읽은 수열의 중앙값을 출력하라. 예) 수열 [1, 5, 4, 3, 2] 가 있을때 읽은횟수 읽어들인 수열 정렬 출력 1 [1] [1] 1 2 [1, 5] [1, 5] 3 [1, 5, 4] [1, 4, 5] 4 4 [1, 5, 4, 3] [1, 3, 4, 5] 5 [1, 5, 4, 3, 2] [1, 2, 3, 4, 5] 3 처음에는 읽어들인 수열의 개수가 홀수일때마다 정렬을해서 중간값을 출력하려했다. 그러나 테스트 케이스의 최대개수 1000개와 최대 수열의 크기 9999개라고 가정했을때 1000*9999**2을 했을때 약 100억 번의 연산횟수가 필요해 시간초과가 뜰거라고 생각했다. 다음으로 최소힙을 사용하려했는데 python에서 최소힙을 사용했을때 힙 배열에 저장되는 인덱스의 순서는 배열에 있는 모든 원소가 정렬되어있다고 보장해주지 않았다. 풀이 결국 블로그를 찾

Naver Blog

<갤럭시 Z플립6>_2024.08.01

헤드라인 [PLAY IT] 주름 펴고 돌아온 '갤럭시 Z플립6', 카메라·AI 기능 돋보여 기사링크 https://www.ddaily.co.kr/page/view/2024072322400814383 본문 (본문 내용 복사) 갤럭시 Z플립6. [디지털데일리 옥송이 기자] 24일 삼성전자의 하반기 갤럭시 신작이 출시됐다. 이에 앞서 폴더블 신작인 갤럭시 Z플립6를 이틀간 사용해 봤다. 전작대비 팽팽해진 힌지 주름 자세히 보아야 보인다. 전작 대비 Z플립6의 변화가. 그도 그럴 것이 외관상 전작대비 차이가 크지 않아서다. 일단 메인·커버 디스플레이의 사양과 크기가 같고, 접거나 폈을 때의 크기는 물론 무게까지 Z플립5와 동일하다. 다만, 측면 프레임이 전작의 둥근 인상에서 각진 디자인으로 바뀌었고, 소재도 유광에서 무광으로 달라졌다. 무엇보다 접혀있던 플립6를 활짝 펼치면 진가가 드러난다. Z시리즈의 고질적인 문제로 거론돼 온 힌지(경첩) 주름이 크게 개선됐다. Z플립5과 Z플립6를 비

Naver Blog

<크래프톤 삼성전자와 협업>_2024.08.12

헤드라인 크래프톤, 삼성전자와 '다크앤다커 모바일' 협업 기사링크 https://www.ytn.co.kr/_ln/0135_202407231117002155 본문 (본문 내용 복사) 크래프톤은 크리에이티브 스튜디오인 블루홀스튜디오가 개발 중인 신작 ‘다크앤다커 모바일(DARK AND DARKER MOBILE)’을 삼성전자와 협업해 갤럭시 스마트폰에 적용한다고 오늘(23일) 밝혔다. '다크앤다커 모바일'은 한국을 비롯해 프랑스 파리, 미국 뉴욕 등 전 세계 7개 도시의 갤럭시 체험 공간인 '갤럭시 익스피리언스 스페이스'에 진열된 갤럭시 Z 폴드6에 설치돼 이용자들이 게임을 직접 플레이해 보고 최상의 그래픽과 몰입감을 체험할 수 있도록 했다. 크래프톤은 지난 10일 ‘갤럭시 언팩 2024’을 통해 공개된 ‘갤럭시 Z 폴드6 ·플립6’ 등 최신 갤럭시 스마트폰의 최상급 환경에서 다크앤다커 모바일을 즐길 수 있도록 삼성전자와 협업했다.고 설명했다. 특히 갤럭시 Z 폴드6에 탑재된 ‘앱 화면

Naver Blog

[백준 14888] 연산자 끼워넣기

https://www.acmicpc.net/problem/14888 문제이해 주어진 N개의 수와 연산자로 만들 수 있는 식의 결과의 최대와 최소를 구해라 주의: 음수를 양수로 나눌 때는 C++14의 기준을 따른다. 즉, 양수로 바꾼 뒤 몫을 취하고, 그 몫을 음수로 바꾼 것과 같다. 이에 따라서, 위의 식 4개의 결과를 계산해보면 아래와 같다. 일반적으로 파이썬의 몫을 구하는 연사자인 '//' 을 사용하면 C++과 다르게 음수 방향으로 반올림함 예) -3//2 는 -2가 됨. 풀이 모든 경우의 수에대해서 dfs의 형식으로 해결 코드 mi = 1111111111 ma = -1111111111 def next_num(loc, a, b, c, d, now): global mi, ma if loc == N: if now < mi: mi = now if now > ma: ma = now return if a>=1: next_num(loc+1, a-1, b, c, d, now + nums[lo

Naver Blog

[백준 3085] 사탕 게임

https://www.acmicpc.net/problem/3085 문제이해 NxN 크기의 2차원 배열에서 연속되는 같은 사탕의 개수의 최대 개수를 구하는것. 색이 다른 인접한 두 칸을 골라 한번 사탕을 교환할 수 있다. 풀이 2차원 배열에 저장하고 한 칸을 기준으로 위, 아래, 좌, 우 4방향으로 인접한 사탕과 교환이 가능하기 때문에 각 4방향으로 교환했을때의 2차원 배열의 행과 열을 탐색하며 같은 사탕의 개수가 최대 몇개가 연결되는지 확인. 코드 N = int(input()) board = [] maxx = 0 for _ in range(N): s = input() tmp = [] for i in s: tmp.append(i) board.append(tmp) def find_max(): global board, maxx for i in range(len(board)): tmp_max = 1 c = board[i][0] for j in range(1, len(board[i])): i

Naver Blog

[백준 2293] 동전 1

https://www.acmicpc.net/problem/2293 문제이해 n가지 종류의 동전을 활용해 주어지는 k를 완성하면 된다. 동전의 개수는 무제한이고 사용한 동전의 구성은 같고 순서만 다른 경우는 같은 경우이다. 풀이 처음에는 dfs로 접근해서 모든 경우의 수를 구하니 사용한 동전의 구성은 같고 순서가 다른 경우를 모두 계산이 되었다. 그 후에 리스트를 만들어 리스트 내에 포함된 각 숫자의 개수를 구해 중복 여부를 확인하려니 더욱 간단한 방법으로 해결이 될 것 같아 고민을 했다. 3 10 1 2 5 위에 케이스에 대해서 직접 정답을 구해보니 1111111111 111111112 11111122 111115 1111222 11125 112222 1225 22222 55 다음과 같은 10개의 케이스가 존재했고 여기서 각 수는 오름차순으로 배열되어 있다. 그래서 dfs에 매개변수로 ex를 주어 이전에 더해진 숫자 이상으로만 더해질 수 있도록 조건을 주었다. 예제에 대한 출력은 잘

Naver Blog

[백준 2294] 동전 2

https://www.acmicpc.net/problem/2294 문제이해 n 가지 종류의 동전을 활용해 주어지는 k를 완성하면 된다. 사용한 동전의 개수가 최소가 되도록 해야 한다. 풀이 첫 번째 접근으로 가장 단위가 높은 동전부터 사용하는 그리디 방법을 사용했다. 단순한 예제에서는 잘 작동을 했지만 복잡한 반례 반례 1 반례 2 8 7804 6531 5312 4188 903 458 310 272 97 3 1203 63 72 888 에서 최적의 정답뿐만 아니라 최적이 아닌 해도 찾지 못했다. 그 이유는 무조건 높은 단위의 동전을 먼저 사용하는 그리디의 방식으로는 작은 단위의 동전을 더 많이 사용해야 하는 경우의 수를 찾지 못하기 때문이다. 인터넷에서 DP로 풀어야 한다는 정보를 얻어서 백준 2293번과 같이 DP로 접근해 봤다. 동전의 순서가 1, 2, 3의 순서로 주어지는 경우를 분석했을 때 DP[j] = DP[j-i] + 1의 점화식을 얻을 수 있었다. 그러나 통과를 하지 못했

Naver Blog

[백준 2667] 단지번호붙이기

https://www.acmicpc.net/problem/2667 문제이해 0과 1로 된 정사각형의 지도가 주어졌을 때 1은 집이 있는 곳, 0은 집이 없는 곳을 나타낸다. 여기서 연결된 집의 모임을 단지로 정의하고 단지 수와 단지에 속하는 집의 수를 오름차순으로 출력. 풀이 익숙한 문제였기에 DFS와 BFS로 풀 수 있는 문제임을 파악했고 익숙한 DFS로 접근했다. 코드 N = int(input()) jido = [list(map(int, input())) for _ in range(N)] danji_num = 0 house_num_list = [] house_num = 0 dy = [1, 0, -1, 0] dx = [0, 1, 0, -1] def dfs(i, j): global house_num house_num += 1 jido[i][j] = 0 for k in range(4): if i + dy[k] >= 0 and i + dy[k] < N and j + dx[k] >= 0

Naver Blog

[백준 1038] 감소하는 수

https://www.acmicpc.net/problem/1038 문제이해 0부터 시작하는 수 중에 N 번째 감소하는 수를 출력 감소하는 수는 가장 큰 자릿수부터 작은 자릿수까지 감소하는 수 감소하는 수: 321, 950 감소하지 않는 수: 322 958 풀이 감소하는 수를 직접 써가면서 규칙을 찾으려 했지만 찾지 못했었다. 그리고 예제 입력 3에서 500000번째 감소하는 수가 없는 것을 확인하고 최대 감소하는 수를 찾아보니 9876543210이었고 9로 시작하는 감소하는 수의 개수를 세려 보니 금방 계산이 가능한 적은 수였다. 그래서 감소하는 수를 모두 찾은 다음 이 수를 정렬하기만 하기로 결정. 코드 import sys N = int(sys.stdin.readline()) all_list = [] def dfs(l): global all_list for i in range(1, l[-1]+1): l.append(l[-1] - i) s = ''.join(map(str,l)) al

Naver Blog

[백준 1062] 가르침

https://www.acmicpc.net/problem/1062 문제이해 단어의 개수 N과 학생들이 읽을 수 있는 글자의 개수 K가 주어졌을 때 학생들이 읽을 수 있는 단어 개수의 최대값을 구하라. 여기서 단어들은 모두 anta로 시작하고 tica로 끝나기 때문에 a, n, t, i, c의 총 5개 글자는 알고 있어야 한 단어라도 이해할 수 있다 그렇지 않은 경우 출력은 무조건 0 풀이 antarctica antahellotica antacartica 의 경우 (a, n, t, i, c)를 제외한 (r, h, e, l, o)의 글자를 추가적으로 알아야 단어를 이해할 수 있다. 그래서 처음으로는 (r, h, e, l, o)에서 선택할 수 있는 글자의 개수만큼의 조합을 구하고 각 단어의 글자를 하나씩 확인하는 방법으로 문제를 풀었다. 그렇게 하니 결국 최악의 경우 21C10 * 50 * 7을 했을 때 122,500,000의 연산이 필요해 시간 초과가 났다. 여기서 비트 마스크를 활용해

Naver Blog

[백준 17070] 파이프 옮기기 1

https://www.acmicpc.net/problem/17070 문제이해 파이프를 연결해서 파이프의 한쪽 끝을 (N, N)으로 이동시키는 방법의 수를 출력 풀이 처음에는 DFS로 구해야겠다고 생각하고 문제에 나오는 조건들을 하나씩 보면서 구현했지만 Python3에서 시간초과가 발생했다. 그러나 PyPy3에서는 시간초과가 발생하지 않았고 인터넷을 찾아보니 C나 C++으로 DFS 구현해도 시간초과가 발생하지 않는다고 한다. 그러나 DP로 문제를 푸는 방법에 대한 글들을 보게 되었고 결국 더 빠르게 문제를 푸는 방법이 있기에 DP로 접근해서 풀어보았다. 처음으로 점화식을 생각할 때는 현재 파이프의 위치에서 다음 파이프의 위치를 고려해 수식을 정리하려 했다. 그러나 이런 방식은 DFS와 크게 다르지 않았다. 그래서 여러 사이트들을 참고한 결과 현재 파이프를 기준으로 이전 파이프에 대해서 생각을 하니 문제가 풀리기 시작했다. for i in range(1, N): for j in rang

Naver Blog

[백준 1260] DFS와 BFS

https://www.acmicpc.net/problem/1260 문제이해 정점의 개수, 간선의 개수, 탐색을 시작할 정점 번호 N, M, V 가 주어졌을 때 DFS와 BFS를 수행해 방문된 점을 순서대로 출력. 풀이 정점과 간선에 대한 정보를 N * N 행렬에 저장하고 BFS는 deque를 이용해 구현했다. 코드 from collections import deque def dfs(V): global m, visited, dfs_list dfs_list.append(V) visited[V] = True for i in range(1, N+1): if m[V][i] == 1 and visited[i] == False: dfs(i) N, M, V = map(int, input().split()) m = [[0] * (N+1) for _ in range(N+1)] for _ in range(M): s, e = map(int, input().split()) m[s][e] = 1 m[e][s

Naver Blog

[백준 1303] 전투

https://www.acmicpc.net/problem/1303 문제이해 전쟁터의 크기 N * M이 주어졌을 때 우리 팀은 W 적 팀은 B으로 전쟁터가 채워져있고 N 명이 뭉쳐있을 때는 N의 제곱의 위력을 낼 수 있다. (대각선으로만 인접한 경우는 제외) 우리 팀의 위력과 적 팀의 위력을 출력해라. 풀이 먼저 W와 B를 각가 0과 1으로 바꿔주었고 visited를 만들어 구현했다. 코드 DFS dy = [0,1,0,-1] dx = [1,0,-1,0] def dfs(i, j, chk): global m, visited, length_list, M, N visited[i][j] = True ret = 0 for ii in range(4): if 0 <= i+dy[ii] < M and 0 <= j+dx[ii] < N and visited[i+dy[ii]][j+dx[ii]] == False and m[i+dy[ii]][j+dx[ii]] == chk: ret += dfs(i+dy[ii],

Naver Blog

[백준 16953] A → B

https://www.acmicpc.net/problem/16953 문제이해 정수 A와 B가 주어졌을 때 A에 가능한 연산은 곱하기 2와 1을 가장 오른쪽에 추가하는 연산만 가능하다. 이 두 가지의 연산을 활용해 A를 B로 바꾸는데 필요한 연산의 최솟값을 구해라. 만들 수 없는 경우 -1 출력 풀이 BFS와 DFS로 풀 수 있을 것 같은데 BFS로 풀었다. 코드 from collections import deque A, B = map(int, input().split()) d = deque() d.append([A, 1]) while d: f, s = d.popleft() if f == B: print(s) exit() if f*2 <= B: d.append([f*2, s+1]) if f*10 + 1 <= B: d.append([f*10 + 1, s+1]) print(-1) 후기 문제가 쉽다고 생각해 만들 수 없는 경우에 대한 출력을 빼먹었었다.

Naver Blog

[백준 13913] 동전 1

https://www.acmicpc.net/problem/13913 문제이해 n 가지 종류의 동전을 활용해 주어지는 k를 완성하면 된다. 동전의 개수는 무제한이고 사용한 동전의 구성은 같고 순서만 다른 경우는 같은 경우이다. 풀이 BFS -> 메모리 초과 -> DFS -> 재귀 깊이 제한 -> BFS (visited 배열로 이미 방문한 곳 방문하지 않음, 메모리 최적화) -> BFS (방문지마다 방문하기까지의 이동 경로를 저장하지 않고 최종 방문지의 이전 방문지 정보를 visited에 저장해 N이 나올 때까지 찾아감, 시간 최적화) 코드 from collections import deque N, K = map(int, input().split()) d = deque() visited = [-1] * 111111 d.append(N) while d: f = d.popleft() if f == K: break for next in (f+1, f-1, f*2): if 0 <= next <

Naver Blog

[백준 15486] 퇴사 2

https://www.acmicpc.net/problem/15486 문제이해 N일동안 상담을해서 얻을 수 있는 최대 수익을 구해라. 풀이 DFS로 접근하기에는 N이 최대 1,500,000으로 depth 제한이나 시간 초과가 발생할 확률이 높아서 DP를 고민했다. DP도 첫날부터 계산할지 마지막 날부터 계산할지 계속 고민을 하다 첫날부터 계산하기로 하고 풀었다. 코드 from sys import stdin N = int(stdin.readline()) T=[0]*(N+1) P=[0]*(N+1) dp = [0]*(N+1) for i in range(N): t, p = map(int, stdin.readline().split()) T[i+1] = t P[i+1] = p for i in range(1, N+1): dp[i] = max(dp[i], dp[i-1]) if i + T[i] - 1 <= N: # 퇴사 전에 상담 완료 가능하면 dp[i + T[i] - 1] = max(dp[i + T

Naver Blog

[백준 1890] 점프

https://www.acmicpc.net/problem/1890 문제이해 NxN의 게임판이 주어졌을 때 각 칸에는 현재 칸에서 갈 수 있는 거리를 의미하는 숫자가 적혀있다. 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 이동할 수 있는 경로의 개수를 구해라. 조건 각 칸에 적혀있는 수만큼의 거리 이동 가능 무조건 오른쪽이나 아래쪽으로만 이동 가능 풀이 2 3 3 1 1 2 1 3 1 2 3 1 3 1 1 0 주어진 게임판 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DP 초기 배열 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 i = 0, j = 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 i = 0, j = 2 DP의 각 칸에 적혀있는 숫자는 해당 칸의 방문 가능한 경로의 수. 이런 식으로 시작점에서 갈 수 있는 칸들을 오른쪽과 아래쪽으로 순서대로 갱신해 주면 DP로 문제를 풀 수 있다. 코드 N = int(input()) bo

Naver Blog

[백준 15989] 1, 2, 3 더하기 4

https://www.acmicpc.net/problem/15989 문제이해 정수 n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력. 풀이 문제를 보자마자 백준 2293번 동전 1 문제와 비슷하다고 느껴서 DP로 금방 접근했다. 그리고 이번 문제에서는 동전이 1, 2, 3으로 주어지기 때문에 더 쉬운 문제라고 생각한다. 코드 import sys T = int(sys.stdin.readline()) ret_list = [] for _ in range(T): n = int(sys.stdin.readline()) ret_list.append(n) dp = [0] * (max(ret_list)+1) dp[0] = 1 for k in range(1, 4): for i in range(1, (max(ret_list)+1)): if i >= k: dp[i] += dp[i-k] for i in ret_list: print(dp[i]) 후기 이전에 풀어봤던 문제랑 비슷해서 빠르게 문제 해결방법

Naver Blog

[백준 1495] 기타리스트 (DP)

https://www.acmicpc.net/problem/1495 문제이해 곡의 개수 N과 시작 볼륨 S, 그리고 최대 볼륨 M이 주어졌을때 마지막 곡의 볼륨이 될 수 있는 최대값을 출력하라. 풀이 DFS나 BFS로 모든 가능한 경로를 탐색하는 최악의 경우를 생각해 봤는데 2^50번의 연산이 필요하기에 이 방법은 접어두고 다른 방법을 계속 생각했었다. 그래서 결국 DP로 풀어봐야겠다고 생각했고 1차원 배열을 가지는 DP와 각 순서의 곡에 대해서 음량을 더한 것과 뺀 것을 저장하는 opposite 변수를 만들어 그리디의 형식으로 풀어보았지만 이 방법은 Optimal Substructure(최적 부분 구조)을 충족하지 못한다. 그래서 하루종일 고민하다 다음날 다음과 같이 최악의 경우를 직접 써봤는데 이 2^N의 경로를 해결할 방법이 떠오르지 않아 결국 구글링을 해봤다. 그 결과 2차원의 DP 배열을 사용해서 해결하는 것을 알게 되었고 해답을 알고 나니까 그림에서 분홍색으로 네모친 부분이

Naver Blog

[백준 14226] 이모티콘

https://www.acmicpc.net/problem/14226 문제이해 이모티콘 S개를 보내려고 하는데 이미 1개가 입력되어있고. 화면에 있는 이모티콘을 모두 복사해서 클립보드에 저장한다. 클립보드에 있는 모든 이모티콘을 화면에 붙여넣기 한다. 화면에 있는 이모티콘 중 하나를 삭제한다. 이 3가지 연산만 사용해 이모티콘 S개를 만들어야한다. 클립보드가 비어있는 상태에는 붙여넣기를 할 수 없음 풀이 최소 시간을 구하는 것이므로 BFS를 사용해서 문제를 풀려고 했었다. 그러나 1, 2, 3의 조건을 그대로 구현하면 계속 복사만 되는 무한 루프에 빠지기 때문에 visited 배열을 만들어야 했다. 또한 여기서 똑같은 곳에 방문했더라도 clip의 값이 다를 수 있기 때문에 clip의 값도 고려해서 visited 배열을 구성해야 한다. 코드 from collections import deque import sys S = int(sys.stdin.readline()) visited = [

Naver Blog

[백준 1495] 기타리스트(DP, 복습)

https://www.acmicpc.net/problem/1495 코드 import sys N, S, M = map(int, sys.stdin.readline().split()) v_list = list(map(int, sys.stdin.readline().split())) dp = [[] for _ in range(N+1)] dp[0].append(S) for i in range(len(v_list)): for j in (dp[i]): if 0<=j+v_list[i]<=M and j+v_list[i] not in dp[i+1]: dp[i+1].append(j+v_list[i]) if 0<=j-v_list[i]<=M and j-v_list[i] not in dp[i+1]: dp[i+1].append(j-v_list[i]) if len(dp[N]) == 0: print(-1) else: print(max(dp[N])) 후기 직관적으로 2차원 배열에 하나씩 추가해가면서 마지막에는 최종

Naver Blog

[백준 17086] 아기 상어 2

https://www.acmicpc.net/problem/17086 문제이해 NxM 크기의 공간에 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 어떤 칸의 안전 거리는 그 칸과 가장 거리가 가까운 아기 상어와의 거리이다. 두 칸의 거리는 하나의 칸에서 다른 칸으로 가기 위해서 지나야 하는 칸의 수이고, 이동은 인접한 8방향이 가능하다. 풀이 모든 칸에 대해서 BFS를 실행해 아기 상어를 만나기까지의 가장 먼 거리를 구하는 방법으로 처음에 풀었다 연산양도 최악의 경우 6,250,000이기 때문에 충분할 거라 생각했는데 python3에서 시간 초과가 발생했다. (pypy3는 정답) 그래서 결국 악어가 있는 칸에서 출발하는 방법을 선택했고 이 방법이 메모리도 적게 사용하고 훨씬 빠르게 정답을 찾아낼 수 있었다. 코드 모든 칸에 BFS 실행 from collections import deque import sys N, M = map(int, sys.stdin.readline().split(

Naver Blog

[백준 11058] 크리보드

https://www.acmicpc.net/problem/11058 문제이해 총 4가지 조건만을 사용해서 화면에 출력된 A의 개수를 최대로 하는 프로그램을 작성하시오. 풀이 백준 14226의 문제와 비슷하다는 생각이 들어서 그때의 기억으로 BFS로 풀어볼까 했으나 모든 경로를 탐색했다간 4의 100제곱의 연산이 필요해 바로 생각을 접고 예제 입력에 나오는 예제들을 하나씩 직접 풀어봤다. 그 결과 복사한 것을 계속 붙여 넣다가 적절히 큰 수가 되었을 때 다시 복사해서 붙여 넣는 방법으로 정답을 구해야 한다는 것을 알았고 DP로 접근해 봤다. 코드 import sys N = int(sys.stdin.readline()) dp = list(i+1 for i in range(100)) for i in range(len(dp)): k = 2 for j in range(i+3, len(dp)): dp[j] = max(dp[i]*k, dp[j]) k += 1 print(dp[N-1]) 후기 예제

Naver Blog

[백준 2023] 신기한 소수

https://www.acmicpc.net/problem/2023 문제이해 신기한 소수란 7331과 같이 왼쪽부터 1자리 2자리 3자리 4자리 수 모두 소수이다. 7, 73, 733, 7331 N자리 수 중에서 신기한 소수를 오름차순으로 정렬해서 한 줄에 하나씩 출력한다. 풀이 먼저 N이 최대가 8이니 99,999,999까지 수에 대해서 모든 소수를 찾은 다음 N 자릿수인 소수를 찾아서 출력하려 했지만 시간 초과가 날 것 같았다. 다음으로 DFS를 생각해 본 결과 시간 복잡도가 5^N * N의 시간 복잡도가 나오기 때문에 DFS로 풀기로 했다. 코드 import sys sys.setrecursionlimit(10000) N = int(sys.stdin.readline()) def sosoo(num): for i in range(2, int(num/2)+1): if num % i == 0: return False return True def dfs(now): global N if no

Naver Blog

[백준 12026] BOJ 거리

https://www.acmicpc.net/problem/12026 문제이해 보도블럭 N개가 일렬로 놓여진 형태의 도로에서 스타트의 집은 1번에 있고 링크의 집은 N번에 있다. 스타트는 링크를 만나기 위해서 점프해가려고 한다. 각 보도블럭에는 B, O, J 중 하나가 쓰여있고 1번은 무조건 B이다. 항상 앞으로만 점프할 수 있고 B->O->J 순서로만 점프할 수 있다. k칸 점프를 하는데 필요한 에너지는 k^2이다. 스타트가 링크를 만나는데 필요한 에너지 양의 최솟값을 구해라. 풀이 문제를 보고 DFS로 풀려고 했으나 최악의 경우 약 333^1000의 연산이 필요하기 때문에 바로 다 른 방법을 찾아보다가 예제 4번을 직접 풀어보니 DP로 풀면 되겠다는 생각이 들었다. 코드 import sys N = int(sys.stdin.readline()) block = sys.stdin.readline() dp = [1000000] * ((len(block))-1) visit = [False]

Naver Blog

[백준 16197] 두 동전

https://www.acmicpc.net/problem/16197 문제이해 NxM 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 각각의 칸은 비어있거나 벽이다. 두 개의 빈칸에 동전이 하나씩 놓여있다. 버튼은 왼쪽, 오른쪽, 위, 아래와 같이 4가지가 있고 두 동전이 그 방향으로 동시에 이동한다. 보드에서 동전 하나만 떨어지고 하나만 남기 위해 버튼을 누르는 최소 횟수를 구해라. 풀이 겹치는 경우 제외 둘 다 방문한 칸으로는 못 감 등등 여러 가지 조건을 계속 고민해서 작성했다 지웠다를 반복하니 깔끔하게 문제를 해결하지는 못한 것 같다. 코드 import sys from collections import deque N, M = map(int, sys.stdin.readline().split()) dy=[0,1,0,-1] dx=[1,0,-1,0] board = [[] for _ in range(N)] coin = [] dq = deque() for i in range(N):

Naver Blog

[백준 16930] 달리기

https://www.acmicpc.net/problem/16930 문제이해 NxM 크기의 체육관이 있다. 각 칸은 빈칸 또는 벽이다. 진영이는 매초 위, 아래, 오른쪽, 왼쪽 중에서 이동할 방향을 고르고 그 방향으로 최소 1개, 최대 K 개의 빈칸을 이동한다. 시작점(x1, y1)에서 출발해 도착점(x2, y2)까지 이동하는 최소 시간을 출력하라. 풀이 최소 시간이므로 BFS로 접근했다. K 개의 칸을 이동하는 경우는 처음이라 여러 조건을 구현하다 보니 코드를 복잡하게 짰고 visited도 구현했었지만 시간 초과가 났다. 코드 import sys from collections import deque N, M, K = map(int, sys.stdin.readline().split()) board = [list(input()) for _ in range(N)] dx = [0,1,0,-1] dy = [1,0,-1,0] x1, y1, x2, y2 = map(int, sys.stdin.r

Naver Blog

스팸 메일 분류하기

import numpy as np import pandas as pd %matplotlib inline import matplotlib.pyplot as plt import urllib.request from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences urllib.request.urlretrieve("https://raw.githubusercontent.com/mohitgupta-omg/Kaggle-SMS-Spam-Collection-Dataset-/master/spam.csv", filename="spam.csv") data = pd.read_csv('spam.csv',encoding='latin1') data[:5] del data['Unnamed: 2'] del data['Unnamed: 3'] del data

Naver Blog

친절한 주식책 2장

유관기관 수수료 : 주식을 거래할 때 거치는 기관에 내는 수수료, 이 수수료는 거래대금당 0.004% 정도 증권거래세 : 주식을 매도할 때에 발생하는 세금, 정부는 코스피 시장과 코스닥 시장에서 일반 주식을 매도할 때마다 매도 대금의 0.25%를 세금으로 떼간다. 다만 국내 시장에 상장되어 있는 ETF와 ETN 제외 배당소득세 : 배당을 주는 주식을 보유한 투자자가에게 부과되는 것, 배당세율은 15.4%(지방소득세 포함)다. 양도소득세 : 주식을 팔 때 그동안 주가가 상승한 차익분에 대해 떼는 세금, 대주주의 경우 부과되는 세금. 대주주가 1주만 매도해도 22%(지방소득세 포함, 과세표준 3억원 초과분은 27.5% 세율 적용)의 양도소득세를 뗀다. 해외주식의 경우 의무적으로 뗀다. 수익 중 250만원은 기본 공제 대상이나, 나머지 금액에 대해서는 22%의 세율이 적용된다. 1년 동안 거래한 주식의 전체 손익을 기준으로 세금이 부과되며, 거래한 종목수나 거래 국가는 무관하다. T+2

Naver Blog

(iOS) Tabman Scroll 기능 막기

class ViewController: TabmanViewController { ... self.dataSource = self self.isScrollEnabled = false ... } TabmanViewController에서 self.isScrollEnabled = false 를 작성해주면 끝 !

Naver Blog

[Flutter] TabBar 하단 색상 바꾸기

이부분 색상 바꾸는 법 ! bottomNavigationBar: SafeArea( child: TabBar( indicatorColor: Color(0xFF8F9BFF), // tab bar color 지정 !!!! tabs: <Tab>[ Tab( icon: Icon(Icons.home_outlined, color: Color(0xFF8F9BFF)), ), Tab( icon: Icon(Icons.person_outline, color: Color(0xFF8F9BFF)), ) ], controller: controller, ), ) TabBar 에 관련된 자료는 아래 참조 https://www.flutterbeads.com/change-tab-bar-color-in-flutter/ Change Tab Bar Color in Flutter | Ultimate Guide 2022 - FlutterBeads <span class="rt-reading-time" style="display:

Naver Blog

[42seoul]Born2beRoot LVM setting for bonus

이 글에서는 debian 설치 중간에 보너스 점수를 받기 위해 LVMGroup을 설정하는 내용만 다루겠습니다. (debian 설치 전후 과정은 생략되었습니다) encrypted LVM을 선택합니다. 디스크를 선택합니다. 뒤에서 모든 것을 삭제할 거라 둘 다 상관 없지만 아래 것을 선택합니다. Yes를 선택합니다. 파티션의 암호를 설정합니다. 기본값 그대로 Continue. Configure the Logical Volume Manager를 선택하여 저희가 원하는 대로 LVM 그룹을 만들고 설정합니다. Yes Delete logical volume 모든 Logical volume을 삭제합니다. 그래야 Volume Group 삭제 가능. 모든 Logical volume 삭제 후에 Delete volume group을 합니다. 선택해서 delete 합니다. Yes Create volume group LVMGroup로 이름을 설정합니다. 위에 것만 선택. Create logical volu

Naver Blog

BLEU Score(Bilingual Evaluation Understudy Score)

BLEU는 기계 번역 결과와 사람이 직접 번역한 결과가 얼마나 유사한지 비교하여 번역에 대한 성능을 측정하는 방법입니다. 측정 기준은 n-gram에 기반합니다. BLEU는 완벽한 방법은 아니지만 언어에 구애받지 않고 사용할 수 있으며, 계산 속도가 빠릅니다. BLEU는 높을 수록 성능이 좋음.

Naver Blog

한국어 형태소 분석기 성능 비교

https://iostream.tistory.com/144 한국어 형태소 분석기 성능 비교 korean-tokenizer-experiments 형태소 분석기 비교실험 환경하드웨어 (MacBook Pro Mid 2015)소프트웨어데이터실험 내용실행 시간 비교로딩 시간형태소 분석 시간문장 분석 품질 비교띄어쓰기가 없는 문장자소 분.. iostream.tistory.com

Naver Blog

정수 인코딩(Integer Encoding)

단어에 정수를 부여하는 방법으로 단어를 빈도수 순으로 정렬한 단어 집합(vocabulary)을 만들고, 빈도수가 높은 순서대로 낮은 숫자를 부여하는 방법이 있음. 1) dictionary 사용하기 from nltk.tokenize import sent_tokenize from nltk.tokenize import word_tokenize from nltk.corpus import stopwords text = "A barber is a person. a barber is good person. a barber is huge person. he Knew A Secret! The Secret He Kept is huge secret. Huge secret. His barber kept his word. a barber kept his word. His barber kept his secret. But keeping and keeping such a huge secret to himsel

Naver Blog

리스트에 for문 내포하기

다음 예제를 보자 a = [1,2,3,4] result = [] for num in a: result.append(num*3) print(result) out : [3, 6, 9, 12] 위 예제는 a 리스트의 각 항목에 3을 곱한 결과를 result 리스트에 담는 예제이다. 이것을 리스트 내포를 사용하면 다음과 같이 간단히 해결할 수 있다. a = [1,2,3,4] result = [num * 3 for num in a] print(result) out : [3, 6, 9, 12] 리스트 내포의 일반 문법은 다음과 같다. [표현식 for 항목 in 반복가능객체 if 조건문] 조금 복잡하지만 for문을 2개 이상 사용하는 것도 가능하다. [표현식 for 항목1 in 반복가능객체1 if 조건문1 for 항목2 in 반복가능객체2 if 조건문2] result = [x*y for x in range(2,10) for y in range(1,10)] print(result) out : [2

Naver Blog

enumerate 이해하기

enumerate()는 순서가 있는 자료형(list, set, tuple, dictionary, string)을 입력으로 받아 인덱스를 순차적으로 리턴함. test = ['a', 'b', 'c', 'd', 'e'] for index, value in enumerate(test): print("value : {}, index {}".format(value, index)) out : value : a, index 0 value : b, index 1 value : c, index 2 value : d, index 3 value : e, index 4

Naver Blog

LeNet-5

구현 : from keras import backend from keras.models import Sequential from keras.layers.convolutional import Conv2D from keras.layers.convolutional import MaxPooling2D from keras.layers.core import Activation, Flatten, Dense from keras.utils import np_utils from keras.optimizers import SGD, RMSprop, Adam import numpy as np import pandas as pd import matplotlib.pyplot as plt from keras.datasets import mnist (train_x_ori, train_y_ori), (test_x_ori, test_y_ori) = mnist.load_data() train_x_ori = train_

Naver Blog

영화 추천 시스템 구현

캐글에서 사용된 영화 데이터셋으로 영화 추천 시스템 만들기. 데이터셋 다운로드 링크 : https://www.kaggle.com/rounakbanik/the-movies-dataset The Movies Dataset Metadata on over 45,000 movies. 26 million ratings from over 270,000 users. www.kaggle.com import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import linear_kernel data = pd.read_csv('movies_metadata.csv 파일 경로', low_memory=False) data = data.head(20000) data.head(2) data['overview'].isnull().sum() # overview에서 Null 값을

Naver Blog

균등분포(Uniform Distribution)

(1) 소개, 유도, 그래프 균등분포는 영어로 uniform distribution 입니다. 더 정확히 얘기하면 '연속균등분포'입니다. 이산확률분포에서도 균등분포를 정의할 수 있기 때문입니다. 균등분포는 모든 확률변수의 함수값이 동일한 분포입니다. 여기서 함수값은 확률이 아닙니다. 확률 밀도입니다. 확률변수의 범위를 a <= x <= b 로 놓고 함수 값은 k라고 한다면 그래프는 아래와 같이 그릴 수 있습니다. 확률밀도함수에서는 면적이 확률이므로 아래 면적이 1이 됩니다. 따라서 아래 등식이 성립합니다. (b-a)*k=1 k를 계산하면 아래와 같습니다. k=1/(b-a) 따라서 균등분포는 아래와 같이 정의할 수 있습니다. 기로호는 아래와 같이 나타냅니다.

Naver Blog

정규분포(Normal Distribution)

정규분포 정규분포(Normal Distribution)는 가우시안 분포(Gaussian Distribution)라고도 불린다. 평균에 가까울수록 발생할 확률이 높고 평균에서 멀어질수록 발생할 확률이 적은 현상을 나타낼 수 있다. 만약 우리나라 성인 남성 평균 키가 173cm라면, 173cm인 사람의 수가 가장 많고, 163cm 또는 183cm인 사람의 수는 상대적으로 적을 것이다. 이러한 현상을 잘 나타내는 분포가 바로 정규분포이다. 정규분포를 따르는 확률변수의 확률밀도함수(probability density function)의 그래프를 그리면 아래 그림1과 같은 종 모양이 된다. 그림 1 출처 : https://codetorial.net/articles/normal_distribution.html 정규분포의 표준화 정규분포를 따르지만 평균과 표준편차가 각각 다른 현상들이 있을 때, 서로 비교하려면 표준화가 필요하다. 간단한 예를 들어 수학 시험과 영어 시험을 봤는데 수학 점수는 평

Naver Blog

RNN을 이용한 텍스트 생성

# 데이터 전처리 from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences import numpy as np from tensorflow.keras.utils import to_categorical text="""경마장에 있는 말이 뛰고 있다\n 그의 말이 법이다\n 가는 말이 고와야 오는 말이 곱다\n""" t = Tokenizer() t.fit_on_texts([text]) vocab_size = len(t.word_index) + 1 # 케라스 토크나이저의 정수 인코딩은 인덱스가 1부터 시작하지만, # 케라스 원-핫 인코딩에서 배열의 인덱스가 0부터 시작하기 때문에 # 배열의 크기를 실제 단어 집합의 크기보다 +1로 생성해야하므로 미리 +1 선언 print('단어 집합의 크기 : %d' % vocab_size) se

Naver Blog

친절한 주식책 1장

"투자해주세요" -> 주식, "돈 빌려주세요" -> 채권 채권자 : 돈을 빌려준 사람 상장지수펀드(ETF) : 인덱스펀드를 거래소에 상장시켜 투자자들이 주식처럼 편리하게 거래할 수 있도록 만든 상품. 보통주 : 의결권 o, 배당금 상재거으로 적음 우선주 : 의결권 x, 배당금 상대적으로 많음 2018년 7월말부터 스튜어드십코드가 도입되면서 보통주와 우선주 간의 주가 괴리율이 좁혀짐. 스튜어드십코드 : 기관투자자들의 의결권 행사를 적극적으로 유도하기 위한 자율 지침. 시가총액 : 발행주식총수(상장주식 수) x 현재의 주가 코스피 상장회사를 시가총액 순으로 나열했을 때 1~100위까지를 대형주라고 한다. 코스피200지수는 유동시가총액을 기준으로 순위를 매긴 것. 유동시가총액 : 현재 주가 x 유동주식수 유동주식수 : 발행주식총수에서 최대주주 및 특수 관계인 보유지분, 우리사주조합, 자사주, 정부 등의 지분, 즉 시장에 실제로 유통될 가능성이 낮은 주식을 제외한 주식. 출처 : 주린이도

Naver Blog

[백준 2565] 전깃줄 (Dynamic Programming)

https://www.acmicpc.net/problem/2565 2565번: 전깃줄 2565번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 전깃줄 출처 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 128 MB 11272 5265 4169 47.097% 문제 두 전봇대 A와 B 사이에 하나 둘씩 전깃줄을 추가하다 보니 전깃줄이 서로 교차하는 경우가 발생하였다. 합선의 위험이 있어 이들 중 몇 개의 전깃줄을 없애 전깃줄이 교차하지 않도록 만들려고 한다. 예를 들어, <그림 1>과 같이 전깃줄이 연결되어 있는 경우 A의 1번 위치와 B의 8번 위치를 잇는 전깃줄, A의 3번 위치와 B의 9... www.acmicpc.net // // main.cpp // boj2565 // // Created by 김병수 on 2020/11/28. // Copyright 2020 coconut. All rights reserved. // #include <iostream

Naver Blog

[백준 9251] LCS (Dynamic Programming)

https://www.acmicpc.net/problem/9251 9251번: LCS 9251번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 LCS 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 26595 10891 8040 40.639% 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 입력 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며,... www.acmicpc.net // // main.cpp // boj9251 // // Created by 김병수 on 2020/11/29. // Copyright 2020 coconut. All rights reserved. // #include <iostream

Naver Blog

[백준 12865] 평범한 배낭 (Dynamic Programming)

https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 12865번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 평범한 배낭 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 512 MB 21139 7982 5329 36.573% 문제 이 문제는 아주 평범한 배낭에 관한 문제이다. 한 달 후면 국가의 부름을 받게 되는 준서는 여행을 가려고 한다. 세상과의 단절을 슬퍼하며 최대한 즐기기 위한 여행이기 때문에, 가지고 다닐 배낭 또한 최대한 가치 있게 싸려고 한다. 준서가 여행에 필요하다고 생각하는 N개의 물건이 있다. 각 물건은 무게 W와 가치 V를 가지는데, 해... www.acmicpc.net // // main.cpp // boj12865 // // Created by 김병수 on 2020/12/02. // Copyright 2020 coconut. All rights reserved. // #include <io

Naver Blog

선형 함수와 비선형 함수

선형 함수 선형 함수란 간단히 말해서 그래프를 그렸을 때 직선의 형태를 갖는 것. (함숫값을 예측하기 쉬움) 비선형 함수 비선형 함수는 그래프를 그렸을 때 직선의 형태를 갖지 않는 것. (함숫값을 예측하기 어려움)

Naver Blog

정규형 연습문제

ex 1) R(A, B, C, D, E) AB -> CDE D -> B Candidate key: AB, AD Prime attribute: A, B, D Non-prime attribute: C, E 2NF AB -> CDE (성립) D -> B (B가 Prime attribute라서 고려하지 않음) 3NF AB -> CDE (AB가 후보키라서 성립) D -> B (B가 Prime attribute라서 성립) BCNF AB -> CDE (AB가 후보키라서 성립) D -> B (D는 후보키가 아니라서 성립하지 않음) 답 : 3NF

Naver Blog

[백준 11650] 좌표 정렬하기 (Sort)

https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 11650번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 좌표 정렬하기 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 35169 16889 12907 48.766% 문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 x i 와 y i 가 주어진다. (-100,000 ... www.acmicpc.net // // main.cpp // boj11650 // // Created by 김병수 on 2021/01/02. // Copyright 2021 coconut. All rights reserved. // #include <i

Naver Blog

[백준 11651] 좌표 정렬하기 2 (Sort)

https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 11651번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 좌표 정렬하기 2 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 17946 12028 10213 69.339% 문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 x i 와 y i 가 주어진다. (-100,00... www.acmicpc.net // // main.cpp // boj11651 // // Created by 김병수 on 2021/01/02. // Copyright 2021 coconut. All rights reserved. // #include

Naver Blog

Supervised Learning과 Unsupervised Learning

머신러닝은 크게 지도 학습(Supervised Learning), 비지도 학습(Unsupervised Learning), 강화 학습(Reinforcement Learning)으로 나눌 수 있다. 이 중 지도 학습과 비지도 학습을 알아보겠습니다. Supervised Learning Supervised Learning을 한 줄로 요약하면 맞춰야 하는 값이 있는 것을 말한다. "어떤 학생이 대학원에 합격할지 맞추어 보아라." 같이 예/아니오의 값을 예측하는 것부터 "지금의 집값이 7억인데 내년에는 집값이 얼마가 될지 예측해라." 와 같이 정확한 값을 예측하는 것 모두 Supervised Learning에 해당한다. 이때 우리는 target value(label)가 있다고 하고, Supervised Learning에는 입력과 출력이 존재한다. Supervised Learning에는 다음과 같은 것들이 포함된다. 분류(Classification) 문제: 예측하는 값이 Categorical

Naver Blog

joint probability, marginal probability

Multiple random variables: consider two here - X, Y A joint probability p(Y = ejY, X = eiX) How likely would ejY and eiX happen together? A marginal probability p(Y = ejY) Regardless of what Happens to X, how likely is ejY? * Ω = event set

Naver Blog

[백준 1976] 여행 가자 (Union Find)

https://www.acmicpc.net/problem/1976 1976번: 여행 가자 1976번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 여행 가자 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 128 MB 9279 3671 2773 39.853% 문제 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인지 알아보자. 물론 중간에 다른 도시를 경유해서 여행을 할 수도 있다. 예를 들어 도시가 5개 있고, A-B, B-C, A-D, B-D, E-A... www.acmicpc.net // // main.cpp // boj1976 // // Created by 김병수 on 2020/09/27. // Copyright 2020 coconut. All rights reserved. // #include <iostre

Naver Blog

[백준 4195] 친구 네트워크 (Union Find)

https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 4195번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 친구 네트워크 출처 다국어 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 3 초 256 MB 16180 5211 2811 27.467% 문제 민혁이는 소셜 네트워크 사이트에서 친구를 만드는 것을 좋아하는 친구이다. 우표를 모으는 취미가 있듯이, 민혁이는 소셜 네트워크 사이트에서 친구를 모으는 것이 취미이다. 어떤 사이트의 친구 관계가 생긴 순서대로 주어졌을 때, 두 사람의 친구 네트워크에 몇 명이 있는지 구하는 프로그램을 작성하시오. 친구 네트워크란 친구 ... www.acmicpc.net // // main.cpp // boj4195 // // Created by 김병수 on 2020/09/29. // Copyright 2020 coconut. All rights reserved. // #include <iost

Naver Blog

[백준 1005] ACM Craft (Topology Sort)

https://www.acmicpc.net/problem/1005 1005번: ACM Craft 문제 서기 2012년! 드디어 2년간 수많은 국민들을 기다리게 한 게임 ACM Craft (Association of Construction Manager Craft)가 발매되었다. 이 게임은 지금까지 나온 게임들과는 다르게 ACM크래프트는 다이나믹한 게임 진행을 위해 건물을 짓는 순서가 정해져 있지 않다. 즉, 첫 번째 게임과 두 번째 게임이 건물을 짓는 순서가 다를 수도 있다. 매 게임시작 시 건물을 짓는 순서가 주어진다. 또한 모든 건물은 각각 건설을 시작하여 완성이 될 때까지 Delay가 존재한다. 위의 예시를 보자. 이번 ... www.acmicpc.net // // main.cpp // boj1005 // // Created by 김병수 on 2020/09/30. // Copyright 2020 coconut. All rights reserved. // #include <io

Naver Blog

쿠팡 파트너스 가입(Coupang Partners)

가입방법 https://partners.coupang.com/ Coupang Partners 쿠팡과 함께 수익을 창출해보세요 partners.coupang.com 쿠팡 파트너스 홈페이지로 들어갑니다. 회원가입 클릭 ! 저는 쿠팡을 사용하고 있기때문에 쿠팡 아이디로 로그인 했습니다. 목록을 작성합니다. AF9761777 추천인 코드 여기서 추천인 코드를 입력시 1%의 수익을 더 얻을 수 있습니다. 기존 3%에서 추가 1%면 적은 수치가 아니기 때문에 꼭 입력하시는 것을 추천합니다. 저의 추천인 ID는 AF9761777 입니다 ! 목록을 작성하고 다음 버튼을 클릭합니다. 목록을 작성합니다. 목록을 작성하고 다음 버튼을 클릭합니다. 가입 완료 !!

Naver Blog

정보처리기사 실기

콘텐츠 제공자 : 콘텐츠를 제공하는 저작권자 패키저 : 콘텐츠를 메타 데이터와 함께 배포 가능한 단위로 묶는 기능 DRM 컨트롤러 or 컨트롤러 : 배포된 콘텐츠의 이용 권한을 통제 IPSec의 세부 프로토콜 IKE(Internet Key Exchange) : 보안 관련 설정들을 생성, 협상 및 관리하는 프로토콜로 udp 500번 포트를 사용하는 프로토콜 ESP(Encapsulating Security Payload) : 메시지 인증 코드(MAC)와 암호화를 이용하여 인증(무결성), 송신처 인증, 기밀성을 제공하는 프로토콜 AH(Authentication Header) : 기밀성(암호화)을 제외한 메시지 인증 코드(MAC)를 이용한 인증(무결성), 송신처 인증을 제공해주는 프로토콜

Naver Blog

[Programmers Summer/Winter Coding(2019)] 지형 이동 (Kruskal Algorithm)

https://programmers.co.kr/learn/courses/30/lessons/62050 코딩테스트 연습 - 지형 이동 solution.cpp 1 #include <string> 2 #include <vector> 3 4 using namespace std ; 5 6 int solution ( vector < vector < int >> land , int height ) { 7 int answer = 0 ; 8 return answer ; 9 } 실행 결과 실행 결과가 여기에 표시됩니다. programmers.co.kr import java.lang.Math; import java.util.*; public class Edge implements Comparable<Edge> { int a,b; int distance; public Edge(int a, int b, int distance){ this.a = a; this.b = b; this.distance = dis

Naver Blog

[Programmers Summer/Winter Coding(~2018)] 방문 길이 (Simulation)

https://programmers.co.kr/learn/courses/30/lessons/49994 코딩테스트 연습 - 방문 길이 solution.c 1 #include <stdio.h> 2 #include <stdbool.h> 3 #include <stdlib.h> 4 #include <string.h> 5 6 // 파라미터로 주어지는 문자열은 const로 주어집니다. 변경하려면 문자열을 복사해서 사용하세요. 7 int solution ( const char* dirs ) { 8 int answer = 0 ; 9 return answer ; 10 } 실행 결과 실행 결과가 여기에 표시됩니다. programmers.co.kr import java.util.*; import java.util.ArrayList; class Solution { public int solution(String dirs) { int answer = 0; int w=0,h=0; HashSet<String>

Naver Blog

[프로그래머스] 프린터 (Queue)

https://programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 solution.cpp 1 #include <string> 2 #include <vector> 3 4 using namespace std ; 5 6 int solution ( vector < int > priorities , int location ) { 7 int answer = 0 ; 8 return answer ; 9 } 실행 결과 실행 결과가 여기에 표시됩니다. programmers.co.kr #include <string> #include <vector> #include <queue> using namespace std; int solution(vector<int> priorities, int location) { int answer = 0; priority_queue<int> pq; queue<pair<int,int>> q; for(int i=0

Naver Blog

[백준 10573] 증가하는 수 (Dynamic Programming)

https://www.acmicpc.net/problem/10573 10573번: 증가하는 수 문제 증가하는 수는 수의 각 자리가 증가하거나 같은 경우이다. 예를 들어서, 다음 세 가지 수를 보자. 123 101 1111000001111 123은 1<2<3이므로 증가하는 수이다. 하지만 101은 1>0<1이고, 1111000001111은 1=1=1=1>0=0=0=0=0<1=1=1=1이므로 증가하는 수가 아니다. 입력 입력은 테스트 케이스의 수로 시작한다. 각 테스트 케이스에는 한 자연수만 있다. 자연수는 80자리 수를 넘지 않는다. 출력 각 테스트 케이스별로 판단한다. 수가 증가하는 수가 아니면, -1을 출력한다. 그 수가 ... www.acmicpc.net // // main.cpp // boj10573 // // Created by 김병수 on 2020/11/24. // Copyright 2020 coconut. All rights reserved. // #include <io

Naver Blog

[백준 1167] 트리의 지름 (Tree)

1167번: 트리의 지름 1167번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 트리의 지름 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 256 MB 11022 4219 3099 37.346% 문제 트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오. 입력 트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2≤V≤100,000)둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. (정점 번호는 1부터 V까지... www.acmicpc.net // // main.cpp // boj1167 // // Created by 김병수 on 2020/09/21. // Copyright 2020 coconut. All rights reserved. // #include <iostream> #include <vector> #include <queu

Naver Blog

[백준 1967] 트리의 지름 (Tree)

https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 문제 트리(tree)는 사이클이 없는 무방향 그래프이다. 트리에서는 어떤 두 노드를 선택해도 둘 사이에 경로가 항상 하나만 존재하게 된다. 트리에서 어떤 두 노드를 선택해서 양쪽으로 쫙 당길 때, 가장 길게 늘어나는 경우가 있을 것이다. 이럴 때 트리의 모든 노드들은 이 두 노드를 지름의 끝 점으로 하는 원 안에 들어가게 된다. 이런 두 노드 사이의 경로의 길이를 트리의 지름이라고 한다. 정확히 정의하자면 트리에 존재하는 모든 경로들 중에서 가장 긴 것의 길이를 말한다. 입력으로 루트가 있는 트리를 가중치가 있는 간선들로 줄 때, ... www.acmicpc.net // // main.cpp // boj1967 // // Created by 김병수 on 2020/09/21. // Copyright 2020 coconut. All rights reserved. // #include <iostr

Naver Blog

[백준 1991] 트리 순회 (Tree)

https://www.acmicpc.net/problem/1991 1991번: 트리 순회 1991번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 트리 순회 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 128 MB 18214 11201 8557 63.142% 문제 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오. 예를 들어 위와 같은 이진 트리가 입력되면, 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식) 중... www.acmicpc.net // // main.cpp // boj1991 // // Created by 김병수 on 2020/09/21. // Copyright 2020 coconut. All rights reserved. // #include <iostre

Naver Blog

[백준 5639] 이진 검색 트리 (Tree)

문제 https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 문제 이진 검색 트리는 다음과 같은 세 가지 조건을 만족하는 이진 트리이다. 노드의 왼쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 작다. 노드의 오른쪽 서브트리에 있는 모든 노드의 키는 노드의 키보다 크다. 왼쪽, 오른쪽 서브트리도 이진 검색 트리이다. 전위 순회 (루트-왼쪽-오른쪽)은 루트를 방문하고, 왼쪽 서브트리, 오른쪽 서브 트리를 순서대로 방문하면서 노드의 키를 출력한다. 후위 순회 (왼쪽-오른쪽-루트)는 왼쪽 서브트리, 오른쪽 서브트리, 루트 노드 순서대로 키를 출력한다. 예를 들어, 위의 이진 검색 트리의 전위 ... www.acmicpc.net 소스코드 // // main.cpp // boj5639 // // Created by 김병수 on 2020/09/22. // Copyright 2020 coconut. All rights reserved. // #incl

Naver Blog

[백준 1753] 최단경로 (Dijkstra)

https://www.acmicpc.net/problem/1753 1753번: 최단경로 1753번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 최단경로 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 66741 17074 8173 23.196% 문제 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. 입력 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에... www.acmicpc.net // // main.cpp // boj1753 // // Created by 김병수 on 2020/09/23. // Copyright 2020 coconut. All rights reserved. // #include <iostrea

Naver Blog

[백준 1504] 특정한 최단 경로 (Dijkstra)

https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 1504번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 특정한 최단 경로 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 1 초 256 MB 22338 5623 3685 23.938% 문제 방향성이 없는 그래프가 주어진다. 세준이는 1번 정점에서 N번 정점으로 최단 거리로 이동하려고 한다. 또한 세준이는 두 가지 조건을 만족하면서 이동하는 특정한 최단 경로를 구하고 싶은데, 그것은 바로 임의로 주어진 두 정점은 반드시 통과해야 한다는 것이다. 세준이는 한번 이동했던 정점은 물론, 한번 이동했던 간선도 다시 이동할... www.acmicpc.net // // main.cpp // boj1504 // // Created by 김병수 on 2020/09/24. // Copyright 2020 coconut. All rights reserved. // #include <io

Naver Blog

[백준 9370] 미확인 도착지 (Dijkstra)

https://www.acmicpc.net/problem/9370 9370번: 미확인 도착지 문제 (취익)B100 요원, 요란한 옷차림을 한 서커스 예술가 한 쌍이 한 도시의 거리들을 이동하고 있다. 너의 임무는 그들이 어디로 가고 있는지 알아내는 것이다. 우리가 알아낸 것은 그들이 s지점에서 출발했다는 것, 그리고 목적지 후보들 중 하나가 그들의 목적지라는 것이다. 그들이 급한 상황이기 때문에 목적지까지 우회하지 않고 최단거리로 갈 것이라 확신한다. 이상이다. (취익) 어휴! (요란한 옷차림을 했을지도 모를) 듀오가 어디에도 보이지 않는다. 다행히도 당신은 후각이 개만큼 뛰어나다. 이 후각으로 그들이 g와 h 교차로 사이... www.acmicpc.net // // main.cpp // boj9370 // // Created by 김병수 on 2020/09/25. // Copyright 2020 coconut. All rights reserved. // #include <iost

Naver Blog

[백준 2252] 줄 세우기 (Topology Sort)

https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 2252번 제출 맞은 사람 숏코딩 재채점/수정 채점 현황 강의 줄 세우기 스페셜 저지 분류 시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율 2 초 128 MB 17087 9101 5997 51.841% 문제 N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다. 일부 학생들의 키를 비교한 결과가 주어졌을 때, 줄을 세우는... www.acmicpc.net // // main.cpp // boj2252 // // Created by 김병수 on 2020/09/25. // Copyright 2020 coconut. All rights reserved. // #include <iostre

1 2