전체 글 562

[11725] 트리의 부모찾기 in python

처음에 문제를 보고 헤맸던 부분은 부모 - 자식 순으로 입력이 주어지는 줄 알았다. 1번 노드가 루트 노드라는 게 문제에 딱 나와있는데, 그걸 놓쳐서 ㅠ.. 어차피 양방향 그래프로 받게 되면 상관이 없음 DFS를 이용하여 풀었다. 1번 노드부터 탐색을 시작해야한다고 문제에 나와있으므로 1번 노드부터 탐색 시작 그래프 입력받은 건 [[], [6, 4], [4], [6, 5], [1, 2, 7], [3], [1, 3], [4]] 1번 노드 : [6.4] 2번 노드 : [4] 3번 노드 : [6,5] 4번 노드 : [1,2,7] 5번 노드 : [3] 6번 노드 : [1,3] 7번 노드 : [4] 1번 노드를 보면 6번과 4번 노드와 연결되어 있다. 6번 노드와 4번 노드는 아직 방문을 하지 않은 노드이므로 1..

[1260] DFS 와 BFS in python

dfs와 bfs를 알아야 풀 수 있었던 문제! DFS : 깊이 우선 탐색 깊게 파고들때까지 파고들다가 막히면 돌아오는 방법 즉 가장 멀리있는(깊이 있는)노드부터 탐색하는 방법 BFS : 넓이 우선 탐색 큐를 이용하여 가장 가까운 노드부터 탐색하는 방법 from collections import deque n, m, v = map(int, input().split()) array = [[] for _ in range(n + 1)] for i in range(m): x, y = map(int, input().split()) array[x].append(y) array[y].append(x) for i in range(n+1): array[i]=sorted(array[i]) dfs_visited = [Fals..

[2606] 바이러스 in python

https://www.acmicpc.net/problem/2606 처음에는 그래프를 단방향으로 했다. 문제에 나와있는 예시도 통과했길래 이게 맞는 건 줄 알았는데 아니었다 ^^ 양방향으로 받아야한다. 단방향으로 받게되면 3에서 탐색이 끝나버린다. 배열 인덱스 3 위치에 있는 곳에는 아무런 노드가 없기 때문에 양항뱡으로 받으면 정상적으로 탐색이 가능해진다. 모든 노드가 연결되어 있는 경우를 생각하지 못했다. n = int(input()) connect = int(input()) array = [[] for _ in range(n + 1)] visited = [False for _ in range(n + 1)] for _ in range(connect): c1, c2 = map(int, input().spl..

[Git] Git 사용법 및 명령어 총정리

[지역 저장소 -> 원격 저장소(깃허브)] -> 지역 저장소에 새 프로젝트 생성 -> git init 명령어로 해당 프로젝트를 깃 지역 저장소로 지정 -> git add 명령어로 수정한 파일을 스테이징 영역으로 옮김 -> git commit 명령어로 지역 저장소에 저장하게 된다. -> git push 명령어로 변경 사항을 원격 저장소에 반영한다. [1] 지역 저장소에 커밋 등록하기 1. 작업 폴더로 이동하기 : cd cd 경로 2. 해당 프로젝트를 깃 지역 저장소로 지정 : git init git init Initialized empty Git repository in /Users/.../.git/ > .git 폴더가 생성되었고, 이제 이 프로젝트는 깃으로 소스 코드 버전 관리가 된다. 폴더 앞에 점이 ..

[REST API] REST API 설계 방법

1. / 의 의미 : /는 계층 관계를 나타내는 데 사용한다. /resource1/{:id}/resource2 ex) GET /users/111/devices : 111번 유저가 소유한 기기목록 정보 요청 or GET /users/111/likes/devices : 111번 유저가 좋아하는 소유한 기기 목록 정보 Resource에 대한 행위는 HTTP Method로 표현함! 2. REST API 규칙 (1) Method는 URL에 포함하지 않는다. (2) URL 마지막엔 /를 포함하지 않는다. (3) 파일 확장자는 URI에 포함시키지 않는다. (4) _대신 -를 사용한다. 대신 -의 사용도 최소화해야함. (5) 대문자 대신 소문자를 사용한다. (6) Control Resource의 경우 동사형태를 허용한..

[REST API] REST API가 뭐야 도대체! (+API, HTTP Method, HTTP Status Code ... )

REST API, 어디서 많이 들어본 개념이지만, 하지만 말로 설명하지 못하는 1인,, (남한테 설명 못하면 그건 알고 있는 게 아니라 수박 겉핥기 식으로 두루뭉실하게 알고 있는 겁니다..) 그래서 제대로 파보기로 했습니다. 방법도 나중에 알아보기 쉽도록 정리해두는 기념으로 해서.. 포스팅을 시작해보겠습니다.. 일단 API 개념에 대해서 짧게 짚고 넘어가볼게요. API란? : Application Programming Interface의 약자, 예시를 들어서 쉽게 설명해보면, 레스토랑에 손님, 점원, 주방이 있다. 1. 점원은 메뉴판을 손님에게 보여준다. 2. 점원은 손님이 고른 메뉴를 접수받고, 주방에 전달한다. 3. 주방에서 음식이 나오면 점원은 손님에게 서빙한다. 여기서 API가 어느 역할일까요? ..

[10282] 해킹 in python

> 다익스트라 해킹된 컴퓨터는 3번 2 -> 1, 2초 3 -> 1, 8초 3 -> 2, 4초 2번 컴퓨터가 1번 컴퓨터에 의존하고 있고, 3번 컴퓨터가 1번 컴퓨터에 의존하고 있으며 3번 컴퓨터가 2번 컴퓨터에 의존하고 있다. computer[부모]=[(자식1,해킹시간1),(자식2,해킹시간2)...] computer[1]=[(2,2),(3,8)] computer[2]=[(1,2)] computer[3]=[] 3번 컴퓨터가 해킹된다.현재 시간은 0초 [지금 시간 + 해킹에 걸리는 시간] from collections import deque t = int(input()) for _ in range(t): n, d, c = map(int, input().split()) # n= 컴퓨터 개수, d= 의존성 개..

[3020] 개똥벌레 In python

누적합으로 먼저 접근하여 코드를 작성했다. 원하는 답이 나와서 아싸! 이러고 백준에 제출을 했는데 아니.. 시간초과요 .. ? python3로 했다가 시간초과가 떠서 pypy3로 돌려봤다. 응 역시 안된다.. ㅎ 똑같이 시간초과가 떠서 좀 고민하다가 결국 구글링.. n, h = map(int, input().split()) array = [int(input()) for _ in range(n)] # 짝수 - 석순, 홀수 - 종유석 answer = [0 for _ in range(h)] for idx, now in enumerate(array): if idx % 2 == 0: # 석순 for i in range(0, now): answer[i] += 1 continue else: # 종유석 for i in..

[9084] 동전 In python

> dp 윽.. 너무 싫어하는 dp 문제다 ㅠㅠ 이 문제는 동전의 종류가 주어지고 주어진 금액을 만드는 모든 방법을 세서 출력하는 문제다. 동전의 종류 2, 3, 5원 목표 금액 10원 위 예시의 과정을 풀어보기 1 2 3 4 5 6 7 8 9 10 2원 0 1 0 1 0 1 0 1 0 1 3원 0 1 0+1 1+0 0+1 1+1 0+1 1+1 0+2 1+1 5원 0 1 1 1 1+1 2+0 1+1 2+1 2+1 2+2 총 4가지의 방법이 있다. 위 과정을 dp 방식으로 코드를 작성하면 아래와 같다 for i in range(int(input())): n = int(input()) coins = list(map(int, input().split())) m = int(input()) dp = [0 for ..

[14891] 톱니바퀴 in python

> 구현 > 시뮬레이션 처음에는 회전하는 톱니바퀴의 번호에 따라 연산을 다르게 해야 하는 줄 알았다. 그래서 회전하는 톱니바퀴가 1번이면 오른쪽만 쭉 확인하고 4번이면 왼쪽 톱니바퀴만 확인하고 둘다 아니면 왼쪽 오른쪽 모두 확인을 해야하는데 이렇게 하게 되면 연산이 너무 복잡해질 것 같아서 다른 방법을 강구해보았다 최종적으로 생각한 방법은 해당 톱니바퀴의 왼쪽과 오른쪽을 각각 확인하는 거다 회전하는 톱니바퀴의 번호에 따라 나누지않고! 회전하는 해당 톱니바퀴의 왼쪽에 있는 톱니바퀴를 회전시킨다. 오른쪽에 있는 톱니바퀴를 회전시킨다. 재귀함수를 이용해서 왼쪽, 오른쪽에 있는 톱니바퀴를 탐색한다. from collections import deque gear = [deque(map(int, input())) ..

[1914] 하노이 탑 in python

> 재귀함수 n=3일 경우 1번 초기값을 제외한 7번의 과정을 통해 하노이 탑을 수행한다. 기둥은 총 3개 f , m , e 순서로 나열되어 있다. 우리는 f 에 있는 원판을 e로 옮겨야한다. 여기서 신경써야 할 조건은 작은 원판이 큰 원판 아래에 있을 수 없다는 것. 이동 횟수가 최소가 되어야 한다는 점. 아래 그림처럼 하나하나 조건을 다 나눠줘야하나 생각했다. 왜 알고리즘 문제를 풀때마다 세부적으로 세세하게 생각을 하는지 ㅠㅠ 큰 틀을 바라봐보기 위해 노력하였다. 그랬더니 맨 아래에 있는 가장 크기가 큰 원판을 제외한 나머지 원판이 m 위치의 기둥에 있어야 하고 f 기둥에 남아있는 원판이 e 기둥으로 옮겨져야 한다. 마지막으로 m 기둥에 있는 원판이 e 기둥으로 옮겨지면 끝! n=3 hanoi(3,1..

[2346] 풍선 터뜨리기 in python

> 자료구조 > 덱 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net 처음 떠올렸던 생각은 array의 값을 하나씩 지워주면 이미 터뜨린 풍선을 따로 뛰어넘는 로직을 만들어줄 필요가 없을 것 같았다. 그래서 풍선을 터뜨리는 순간 해당 풍선은 배열에서 값이 사라지게끔 했는데 이렇게 하니까 인덱스 번호를 어떻게 남겨야할지 고민이었다. 연산으로 할 수 있는지 이것저것 갖다 붙여봤는데 도저히 안돼서 결국,, 인덱스 리스트를 하나 새로 ..

[M1 Error] mysqlworkbench가 예기치않게 종료되었습니다.

최신 버전으로 했을 때 아래와 같은 종료메세지가 떠서 계속 다운그레이드하여 다운을 해주었다. 그런데도 아래와 같은 메세지가 계속 떴고,, 구글링을 해보니 맥북을 다시 껐다 키면 된다고 하여 믿져야 본전이지라는 마음으로 재시작을 해보았더니 따란~ MySQL Workbench가 짜잔하고 열려부렸다!! (번외) MySQL Workbench를 MySQL 홈페이지에서 다운받아서 열었을 때 Apple에서 악성 소프트웨어가 있는지 확인할 수 없기 때문에 열 수 없습니다라는 메세지가 떴다.. 이게 머지하면서 구글링을 열심히 했더니! 앱 스토어 외에서 다운로드 받은 앱을 실행할 때 뜨는 메세지라고 한다. 해결 방법은 시스템 환경설정 -> 보안 및 개인 정보 보호 -> 일반 -> 다음에서 다운로드한 앱 허용 파트 부분에 ..

[M1 Error] Error: Unknown command: cask

mysqlWorkbench를 다운로드 하던 중에 만난 Error: Unknown command: cask라는 에러.. ㅂㄷ 인터넷에서는 brew cask install mysqlWorkbench 위 문장을 입력해주면 mysqlWorkbench를 깔 수 있다는데 에러가 뜬 것! brew list를 해봤더니 cask가 리스트에 있음! 그래서 어떤 오류일까? 알아본 결과 install 사용방법이 변경되었다고 한다. brew install --cask mysqlworkbench 위 처럼 변경해주면 끄읕-! 설치 완료!!

[15961] 회전 초밥 in python

https://www.acmicpc.net/problem/15961 15961번: 회전 초밥 첫 번째 줄에는 회전 초밥 벨트에 놓인 접시의 수 N, 초밥의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 각각 하나의 빈 칸을 사이에 두고 주어진다. 단, 2 ≤ N ≤ 3,000,000, 2 ≤ d ≤ 3,000, 2 www.acmicpc.net > 투 포인터 > 슬라이싱 윈도우 윽.. 이 문제 간단해보였는데 전혀 아니었다! 혽자선 도저히 못 풀 것 같아서 결국 고수님들의 풀이를 살펴보았다. 그래도 이해가 되지 않아서 계속 그림을 그려가며 이해하기 위해 노력했다. 일단 코드는 아래와 같다. 어떤 코드에서는 딕셔너리를 이용하라고 하는데 나는 cache라는 리스트를 이용하였음. n, d, k, c ..

[2688] 줄어들지 않아 In python

> dp문제 으윽 dp문제 너무 시러.. ㅠ..ㅠ 그래도 좀전에 풀었던 문제들이 dp였어서 그나마 내 기준에서는 쉽게 풀었다!! n=1일때 -> 총 2가지 0, 1 n=2일때 -> 총 55가지 00, ... 09 : 10 11, .... 19 : 9 22, .... 29 : 8 33, ... 39 : 7 44, ... 49 : 6 55, ... 59 : 5 66, ... 69 : 4 77, ... 79 : 3 88, ... 89 : 2 99 : 1 1+2+...+10 = 55 n=3일때 -> 220가지 000 > 55가지 00, ... 09 11, ... 19 ... 100 > 45가지 11, ... 19 22, ... 29 33, ... 39 200 > 45-9=36가지 300 > 36-8=28가지 4..

[5582] 공통 부분 문자열 in python

> dp 문제 두 문자열의 공통 부분을 찾는 문제였다. 이 문제는 다이나믹 프로그래밍을 이용하여 구할 수 있다. a 문자열이 ADABRA b 문자열이 ECADADABR 이라고 하면 가장 긴 공통 부분 문자열은 ADABR이다. 즉 길이는 5가 된다. 이를 구하려면 아래와 같이 총 6개의 리스트를 필요로 함! 저번에 풀었던 기타리스트 1495번 문제와 비슷하다. https://eboong.tistory.com/449 [1495] 기타리스트 in python > dp (다이나믹 프로그래밍) dp문제는 너무너무 어렵다... 실버1이지만 실버1 같지 않은 문제.. ㅠ.ㅠ 열심히 더 노력하자! dp로 해야해서 리스트를 도대체 어떻게 만들라는건가 햇더니 dp 리스트가 eboong.tistory.com E C A D ..

[1495] 기타리스트 in python

> dp (다이나믹 프로그래밍) dp문제는 너무너무 어렵다... 실버1이지만 실버1 같지 않은 문제.. ㅠ.ㅠ 열심히 더 노력하자! dp로 해야해서 리스트를 도대체 어떻게 만들라는건가 햇더니 dp 리스트가 여러개 필요했다. start, 볼륨 리스트 개수... 하나의 dp 리스트로만 풀 수 잇을거란 생각을 깨자 이렇게 여러개로 하면 더 쉬울때도 있다.. 트리식으로 가지치기가 필요한 순간이라면 Dp를 떠올려보자! 두려워하지말기 :) n, s, m = map(int, input().split()) v = list(map(int, input().split())) dp = [[False for _ in range(m + 1)] for _ in range(n + 1)] # start, nList dp[0][s] =..

[1024] 수열의 합 In python

> 수학 알고리즘 규칙을 찾아 푸는 문제 https://danco.tistory.com/30 [1024] 수열의 합 https://www.acmicpc.net/problem/1024 처음에 나누는 수 L을 짝수일 때, 홀수일 때로 나눠서 나온 수를 수열의 가운데 있는 숫자라고 정하고, 그 수 앞뒤로 연속되는 숫자를 출력하는 방식으로 했는데 94%에 danco.tistory.com 위 블로그에 규칙 정리가 잘 되어 있어서 펌해왔음. n= 18, L=2일 경우 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 출력값은 5,6,7 연속된 숫자의 합이 n과 같아져야 하고 그 연속된 숫자의 길이가 가장 짧아야한다. 위 과정을 수식으로 정리하면 아래와 같다. n=(x+1)+(x+2)+..

[2312] 수 복원하기 in python

수 복원하기 문제는 소수를 통해 소인수 분해를 진행해야 했다. 소수를 구할땐 에라토스테네스의 체를 이용하면 빠른 시간 내에 소수를 구할 수 있다. 문제에서 주어진 최대의 수만큼 리스트를 생성하고 소수를 모아둔 리스트를 prime에 넣는다. -> 소수를 구하는 과정을 1번만 진행하기 위함. 소인수를 구할 때 소수를 이용한다. 만약 주어진 수가 6이라고 치면 6을 소인수 분해하면 2 1 , 3 1 이렇게 답이 나온다. 즉 2 x 3 = 6, 12를 소인수 분해하면 2 2 , 3 1 즉 (2x2) x (3x1) = 12 12이하인 소수들 가지고만 판별을 진행한다. 1) 소수(i) 2, num = 12 12 % 2 = 0일 경우 2를 인자로 가지고 있다. cnt+=1 num에는 2를 나눠야한다. 따라서 num ..

[2473] 세 용액 in python

https://www.acmicpc.net/problem/2473 투 포인터를 활용하여 풀어야했던 문제! 빡구현으로 풀게 되면 당연히 시간초과가 발생한다. 이분 탐색을 이용하려면 일단 오름차순으로 리스트를 정렬한 뒤 투 포인터를 사용해야 한다. 세 용액의 합이 음수이면 left 포인터가 오른쪽으로 1칸 이동하고 양수이면 right 포인터가 왼쪽으로 1칸 이동한다. left 포인터가 오른쪽으로 움직이거나 right 포인터가 왼쪽으로 움직이게 되면 합의 절댓값이 0에 가까워진다. 지금 같은 경우에는 left의 위치가 i+1, right의 위치는 평소대로 n-1에 위치해있다. 왜냐하면 이 문제에서는 두 용액이 아닌 세 용액의 합을 더해줘야 하기 때문이다. 따라서 array[i]의 값은 0부터 n-2-1까지만 ..

[16678] 모독 In python

https://www.acmicpc.net/problem/16678 문제에서 주어진 그대로 for문을 사용하여 구현하였으나 시간초과 흠... 그럼 어찌해야하나.. n = int(input()) array = sorted(list(int(input()) for _ in range(n))) answer = 0 for num in range(n): array = [array[i] - 1 for i in range(n)] if array[num] >= 1: answer += array[num] print(answer) 변수 t를 이용하여 손쉽게 해결할 수 있었다. t가 모든 국회의원을 모독해서 각각의 명예 점수를 1씩 감소시키는 데 사용되는 변수다. n = int(input()) array = sorted(li..

[20127] Y - 수열 in python

윽 너무 어려웠다 ㅠㅠ... 일단 상승곡선이 하락곡선 또는 하락곡선이 상승곡선으로 바뀌는 구간이 2개 이상일 경우에는 -1을 출력해야 한다. 그리고 이미 주어진 배열 자체가 증가 또는 감소 수열이면 0을 출력한다. 두 가지를 제외했을 때가 직접 바꿔줘야 하는 때이다. 아래 코드 지저분함 주의.. # n = int(input()) # array = list(map(int, input().split())) # cnt = 0 # plus = False # minus = False # button = False # mid=False # answer = 0 # # for i in range(1, n): # if cnt > 1: # print(-1) # exit() # if array[i] >= array[i - ..