구현이 좀 빡센 BFS 문제였다. 테스트케이스에 n, m, p가 주어진다. n,m은 게임판의 사이즈, p는 플레이 하는 인원의 수다. 그후에 S1, S2, ...Sp가 주어진다. 각 플레이어의 한턴에 움직일 수 있는 거리다. 그후에 게임판이 주어진다. 예시) 테스트케이스 7번 1..1 #.## .... ...2 '숫자'는 플레이어의 인덱스이고, . 은 갈 수 있는 길, #은 벽을 의미한다. 구현이 그리 어렵진 않았지만, 헛도는 것을 예외 처리 하는게 중요하다. 코드 1 import sys from collections import deque input = sys.stdin.readline n,m,p = map(int,input().split()) castle = [[] for _ in range(p+1)..
분할 정복 (Divide & Conquer) 분할 정복은 문제를 여러개로 나누어서 푸는 알고리즘입니다. 문제를 여러개로 분할하여 정복하기 동적 계획법(DP)과의 차이점은 동적 계획법은 분할한 문제들이 서로 영향을 미침. 분할 정복은 분할한 문제들이 서로 영향을 미치지 않음. 이 있습니다. 분할 정복의 필요조건 문제를 나눌 수 있어야 합니다. 부분 문제의 답을 이용하여 원래 문제의 답을 계산하는 방법이 있어야 합니다. 분할 정복의 알고리즘의 접근법은 다음과 같습니다. 분할 : 문제를 작은 문제로 분할하는 과정 정복 : 분할한 작은 문제들을 해결. 조합 : 작은 문제에 대한 결과를 원본 문제에 대한 결과로 조합합니다 분할 정복 문제 하나를 가져와서 함께 풀어보겠습니다. 풀어볼 문제는 1074번 Z입니다. 문..
완전탐색이란? 문제에서 주어질 수 있는 모든 경우의 수를 탐색하는 알고리즘을 말합니다. 이번 글에서는 알고리즘에서 주로 쓰는 조합형 완탐 함수 4가지를 소개합니다. product permutations combinations combinations_with_replacement 조합형 : product, 곱집합 대표적인 이름으로는 곱집합, 데카르트의 곱이라고 합니다. 곱집합은 for문 두개를 섞어놨다고 생각하시면 됩니다. product(p, q, … [repeat=1]) 이런 형태로 사용할 수 있습니다. 예시 itertools.product('1234', '1234') 또는 itertools.product('1234', repeat=2) [('1', '1'), ('1', '2'), ('1', '3'), ..
파이썬 코딩 테스트에서 자주 사용되는 데큐(deque)입니다. from collections import deque 이렇게 불러올 수 있습니다. deque를 사용하면 얻는 장점 엄격한 리스트를 만들 수 있다. 속도가 리스트에 비해 굉장히 빠르다. List = O(n), deque = O(1) 당연하지만 큐작업이 훨씬 편해진다. 큐(QUEUE)에 대한 이해. 큐는 기본적으로 선입 선출 (FIFO : First In First Out)구조입니다. 예시로는 다음이 있습니다. 프린터기 : 프린터기는 먼저 인쇄를 누른 것부터 차례대로 작동합니다. 은행 대기표 : 은행에서는 먼저 대기표를 뽑은 사람부터 차례대로 서비스를 진행합니다. deque 함수는 큐에 제한되어 있는 선입선출 제한을 풀어서, 더 여러곳에 사용할 ..
백준 알고리즘 2108 | 통계학 https://www.acmicpc.net/problem/2108 최근에 구현 문제를 풀기 시작했는데, 재미있네요 ㅋㅋ 산술평균 : N개의 수들의 합을 N으로 나눈 값 (반올림) 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 입력된 값을 다음과 같이 출력해야하는 문제입니다. 시간초과 이 문제가 시간 초과가 뜬다면, 다음을 확인해주세요. 1. sys.stdin.readline()을 사용하는가? input보다 속도면에서 확연한 차이를 보입니다. readline으로 입력을 받으세요. 2. 시간 복잡도가 높은가? 아마도 최빈값에서 시간 복잡도가 높아..
파이썬에는 round라는 반올림 함수가 있다. >>> round(0.5) 0 >>> round(1.5) 2 >>> round(2.5) 2 >>> round(3.5) 4 >>> round(4.5) 4 >>> round(5.5) 5 다만 파이썬이나 자바스크립트 같은 개발언어에서는 위와 같이 "오사오입"이라는 방식의 반올림을 사용합니다. 오사오입(round-to-nearest-even) 반올림에서 5 미만의 숫자는 내림, 5 초과의 숫자는 올림합니다. 5의 앞자리가 홀수인 경우에는 올림을, 짝수인 경우에는 내림을 합니다. 우리가 자주 사용하는 사사오입의 반올림은 4 이하의 숫자는 내림, 5 이상의 숫자는 올림을 하는 반올림이죠! 반올림의 종류에 관해서는 이 문서를 읽어주세요. 사사오입의 반올림을 구현하는 방법..
백준은 입력값을 받아서 문제를 푸는 구조입니다. input() import sys sys.stdin.readline() 이 둘은 기능상으로는 큰 차이가 없지만, 속도 차이가 큽니다. 그래서 input으로 작업한 코드가 시간 초과가 났을 때, sys 입력으로 변경해주면 정답처리가 될 확률이 큽니다. 다만, 적혀있는 input들을 전부 변경하기에는 굉장히 귀찮은 작업인데요. 여기서 팁 하나, import sys input = sys.stdin.readline 을 코드 제일 위에 추가한다면, input이 sys.stdin.readline의 속도를 갖습니다.
파이썬에서 리스트를 생성할 때는 다음과 같은 방법이 있다. list = [] list = list() 여기서 코딩테스트에서 자주 사용하는 0으로 이루어진 리스트를 만들려면 다음과 같은 방법이 있다. list = [0 for i in range(n)] >>> list = [0 for i in range(10)] [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 이와 같은 방법을 사용해서 2차원 리스트를 만들려면 다음과 같은 방법을 사용하면 된다. double = [[0 for w in range(n)] for h in range(n)] >>> double = [[0 for w in range(3)] for h in range(5)] [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, ..
원본 링크 : https://github.com/loonghao/photoshop-python-api 어도비사의 포토샵 API 한글 예제입니다. 번역되어 있는 자료가 없어, 새로 번역하였습니다. 지원되는 버전 2021 2020 cc2019 cc2018 cc2017 설치 pip install photoshop_python_api 포토샵이 설치 되어 있어야 작동합니다. 예제 코드 폰트는 어도비 기본폰트가 아니라면 대부분이 적용되지 않습니다. 폰트명은 영어명으로 지정해줘야 작동합니다. import photoshop.api as ps app = ps.Application() # 포토샵 불러오기 doc = app.documents.add(1920, 1080) # 문서 생성 사이즈 : 1920x1080 text_l..
백준 알고리즘 1080번 | 행렬 https://www.acmicpc.net/problem/1080 문제 0과 1로만 이루어진 행렬 A와 행렬 B가 있다. 이때, 행렬 A를 행렬 B로 바꾸는데 필요한 연산의 횟수의 최솟값을 구하는 프로그램을 작성하시오. 행렬을 변환하는 연산은 어떤 3×3크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0) 입력 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. 출력 첫째 줄에 문제의 정답(뒤집을 수 있는 최소 횟수)을 출력한다. 만약 A를 B로 바꿀 수 없다면 -1을 출력한다. 예제 입력 1 3 4 0000 0..
zip함수 zip은 반복 가능한 요소들을 압축하는 기능을 가지고 있습니다. 반복 가능한 요소들에는 리스트, 튜플, 딕셔너리, set이 있습니다. zip의 기본형태: zip(반복 가능한 요소 1, 반복가능한 요소 2, 반복 가능한 ... ) zip을 사용해보겠습니다. listA = ['Alice', 'Anna'] listB = ['Bob', 'Jon', 'Frank'] >>> print(list(zip(listA, listB))) [('Alice', 'Bob'), ('Anna', 'Jon')] # 이런느낌 listA = ['i1', 'i2'] listB = ['i1', 'i2', 'i3'] >>> print(list(zip(listA, listB))) [('i1', 'i1'), ('i2', 'i2')] z..
오늘은 효율성 있는 코드를 짤때 자주 사용되는 filter, map, lambda에 대해 공부해보겠습니다. 이 글에 적힌 내용을 마스터하시면 코드 효율성은 물론이고, 코딩할 때 멋이 삽니다. lambda 함수 람다식은 간단한 함수를 한줄로 축약하는 기능을 가졌습니다. 람다의 장점은 메모리 절약이 있고, 특징으로는 "elif는 사용 불가"가 있습니다. 기본 형태는 다음과 같습니다. lambda : if else 만약 n이 17보다 크면 True를 그렇지 않다면 False를 반환하는 코드를 함수와 람다식으로 각각 아래와 같이 표현할 수 있습니다. 1. 함수 def calc(n): if n > 17: return True else: return False 2. 람다 lambda n : True if n>17 ..
개발 날짜 : 2021.03.31 ~ 리눅스 서버에서 돌아가는 코드입니다. 권장 사항 : 이 프로그램은 코로나 19 자가진단을 무증상으로 제출하는 프로그램입니다. 증상이 있을 시 스스로 해당하는 증상에 유증상으로 체크하시기 바랍니다. 프로젝트 관련 추천글 리눅스 서버 무료로 만들기 리눅스 백그라운드 실행 리눅스 파이썬 모듈 설치 리눅스 설치 필요 모듈 schedule selenium selenium-webdriver 개발 일지 1.1.0 이제 원하는 시간에 자가진단을 진행할 수 있습니다. 기본 설정은 08시(오전 8시)입니다. 1.1.1 인터넷 속도에 따라 입력 오류가 날 수 있는 점을 보완했습니다. 1.2.0 - 보안 키패드 입력 기능 비밀번호에 맞는 버튼을 순서대로 눌러 입력해줍니다. - html..
파이썬 스케줄 모듈은 반복되는 코드를 정리할 때 제격인 모듈입니다. 먼저 스케줄 모듈을 설치해주세요. 윈도우 pip install schedule 리눅스 pip3 install schedule import schedule import time def job(): print("작업") # 할 일들 # 10초에 한번씩 실행 schedule.every(10).second.do(job) # 10분에 한번씩 실행 schedule.every(10).minutes.do(job) # 매 시간마다 실행 schedule.every().hour.do(job) # 10시간마다 실행 schedule.every(10).hour.do(job) # 매일 10:30에 실행 schedule.every().day.at("09:00").d..
1. 파이썬 코드 백그라운드 실행 리눅스 창을 꺼도 코드가 종료되지 않음. nohup python -u /path/filename.py & 이 명령어는 파이썬 코드를 백그라운드에서 실행하는 명령어입니다. 출력문들은 같은 폴더의 nohup.out 파일에 저장됩니다. 2. 파이썬 코드 출력문 보기 tail -f nohup.out 이 명령어는 파이썬 코드를 실행하면서 나오는 출력문들을 라이브로 보여주는 코드입니다. Ctrl + C로 라이브 시청을 나갈 수 있습니다. 3. 실행 중인 프로그램 보기 ps -ef | grep filename.py 실행 중인 프로그램들을 보여줍니다. 4. 실행 중인 코드 종료 kill [실행 넘버] 실행중인 프로그램을 종료합니다. 여기서 'grep --color=auto 파일명.py..
백준 알고리즘 2217번 | 로프 https://www.acmicpc.net/problem/2217 문제 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를..
백준 알고리즘 1541번 | 잃어버린 괄호 https://www.acmicpc.net/problem/1541 문제 세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오. 입력 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다. 출력 첫째 줄에 정답을 출력한다...
백준 알고리즘 2839번 | 설탕 배달 https://www.acmicpc.net/problem/2839 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 ..
원문 : https://github.com/deezer/spleeter Spleeter에 대하여 Spleeter은 Python으로 작성된 사전 훈련 모델을 보유하고 있는 Deezer 음원 분리 라이브러리이 Tensorflow를 사용합니다. 음원 분리 모델을 쉽게 훈련할 수 있으며(분리된 소스의 데이터 세트가 필요) 다양한 분리 방식을 수행하기 위해 이미 훈련된 최첨단 모델을 제공합니다. 보컬(노래하는 목소리) / 반주 (2음원) 보컬/드럼/베이스/나머지 (4음원) 보컬/드럼/베이스/피아노/나머지 (5음원) 2음원과 4음원 모델은 *musdb 데이터 셋에서 높은 성능을 보입니다. Spleeter은 GPU에서 실행할 때 실시간보다 100배 더 빨라집니다. *musdb는 Mixture(혼합물), Drums(드..
음향 분리 모듈인 Spleeter을 사용하여 만든 코드입니다. 코드 실행 전에 터미널창에 pip install Spleeter를 입력해주세요. Spleeter 모듈의 사용 방법은 이곳을 클릭하여 알아볼 수 있습니다. 이 코드에서는 3가지를 입력받습니다. 1. 음원파일 갯수, 2, 4, 5 중 하나를 입력해주세요. 2 : 보컬 + 배경 음악 4 : 보컬 + 드럼 + 베이스 + 나머지 5 : 보컬 + 드럼 + 베이스 + 피아노 + 나머지 2. 폴더 경로 입력 ex) C:\music_file 3. 파일 이름 입력 (확장자명은 적지 않고, mp3만 가능함) ex) 브루노 마스 (Bruno Mars) - That’s What I Like mp3파일의 이름 중 띄어쓰기는 언더바(_)로 변경됩니다. import os..