본문 바로가기
728x90
반응형

코딩

알고리즘 - Python / 백준 - 10798번 : 세로읽기 10798번: 세로읽기 (acmicpc.net) 10798번: 세로읽기 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’ www.acmicpc.net 풀이 5줄에 걸쳐 문자열을 받고 그 문자열을 세로로 읽은 문자열을 출력하는 문제다. 문제의 포인트는 각 문자열의 길이가 다르기 때문에 빈 공간을 처리하는 방식이다. 직관적으로 빈공간에 모두 별표를 넣어버리고 꽉 찬 사각형을 세로로 읽은 후 나중에 별표를 모두 삭제하는 방식으로 구현하였다. arr = [] for _ in range(5): arr.append(input()) check = [] for i in .. 더보기
알고리즘 - Python / 백준 - 14246번 : K보다 큰 구간 14246번: K보다 큰 구간 (acmicpc.net) 14246번: K보다 큰 구간 n개의 자연수로 이루어진 수열이 주어질 때, 특정 구간 [i,j](i≤j)의 합이 k보다 큰 모든 쌍 i,j의 개수를 출력하시오. www.acmicpc.net 풀이 일정 길이만큼의 수열이 주어지고 , 이 수열의 구간합이 k 이상인 구간이 얼마나 있는지 구하는 문제다. 전형적인 구간합 + 투 포인터 문제라고 생각하고 문제를 풀었다. 하지만 계속해서 백준 상에서 valueerror가 나왔고 , 이 문제 때문에 블로그에 글로 남기기로 했다. 문제 풀이 자체는 심플하게 구간합을 구해주고 , 투 포인터로 구간합에 접근하는 방식이다. 만약 이번 포인터에서 합이 k보다 크게 나왔다면 뒤는 볼 필요도 없다. 왜냐하면 빼는 경우가 없기.. 더보기
알고리즘 - Python / 백준 - 17298번 : 오큰수 17298번: 오큰수 (acmicpc.net) 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 풀이 수열이 주어지고 , 그 숫자보다 오른쪽에서 큰 숫자들 중 가장 먼저 나오는 수가 오큰수 이다. 주어진 수열에 대하여 오큰수(An)을 찾으면 되는 문제다. 스택을 통해서 구현할 수 있고 , 다음과 같은 방식으로 해결하면 된다. 1. 스택의 TOP과 비교해 다음 수가 크다면 , POP 하고 그다음수를 오큰수로 정함 2. 스택의 TOP과 비교해 다음 수가 작다면 , 스택 위에 추가함 1번의 경우 스택이 빌 때까지 진행하고 , 2.. 더보기
알고리즘 - Python / 백준 - 1406번 : 에디터 1406번: 에디터 (acmicpc.net) 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 풀이 리눅스 vi 에디터 같은 형태의 에디터를 직접 구현하는 문제다. 문제만 읽었을 때는 어려운 부분이 없어 보이지만 , 시간제한을 0.3초 밖에 주지 않는 문제다. 문자열의 원하는 위치에 삽입 혹은 삭제가 가장 시간을 많이 잡아먹는 작업일 테고 이를 효과적으로 줄이는 것이 중요할 것이다. 커서의 위치와 문자열 시작 위치를 저장해놓고 , 커서를 좌우로 옮길 때 , deque를 rotate 해주는 방식으로 구현하였다. 만.. 더보기
알고리즘 - Python / 백준 - 2468번 : 안전 영역 2468번: 안전 영역 (acmicpc.net) 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 풀이 n * n 격자에 지역의 높이가 입력되고 , 해당 지역에 비가 내렸을 때 높이가 비의 양보다 낮다면 물에 잠긴다. 이때 , 만들어질 수 있는 최대 안전지역의 개수를 찾는 문제다. 단순하게 그래프 탐색 문제로 풀 수 있다. dfs를 이용해서 구현하였고 , 가장 높은 지역보다 비가 더 많이 내린다면 측정할 필요도 없이 모두 물에 잠기기에 최대 높이를 구해주고 0 ~ max 값까지 for문을 통해 해당 비의 양에 따라 d.. 더보기
[ 구글 코드잼 예선 ] Google Code Jam 2022 Qualification Round 리뷰 구글 코드잼 예선 Google Code Jam 2022 Qualification Round 리뷰 요즘 바쁘긴 하지만 코드잼은 빼먹을 수 없었다. 과거 작년 , 재작년 코드잼을 신청해놓고 그냥 놀아버려 도전도 하지 못했던 과거를 생각해 이번에는 신청한 김에 꼭 참여해보기로 했다. Atcoder도 가끔 하고 , 백준도 요즘 건드리지 않고 있는데 머리에 알고리즘 불씨를 살려주기에 정기적인 공부만 한 게 없다. 가벼운 마음으로 공부한다 생각하고 도전해보았다. 구글 코드잼은 예선 통과만 하려면 30점 이상만 하면 되는 걸로 기억한다. 아마 앞의 3문제 A, B, C 문제만 맞혀도 자동 예선 통과로 알고 있다. 다음 라운드의 경우는 시험기간이라 도전하지 않을 생각이다. 어차피 그 이상의 의미있는 대단한 성적을 내는.. 더보기
[Music21] 4. Music21 가이드 ( Chords ) Music21 라이브러리 가이드 4 from music21 import * #Music21 User Guide 7 레퍼런스 정리 cMinor = chord.Chord(["C4","G4","E-5"]) #다음과 같이 코드를 만들 수 있다. #코드는 여러 피치 오브젝트를 하나로 결합하여 만드는 객체이다. #가장 간단한 방법은 다음과 같이 코드 객체 안에 여러 피치 이름으로 이루어진 리스트를 전달하는 것이다. #코드와 노트는 모두 GeneralNote 의 서브클래스 이므로 다음과 같이 공유하는 부분이 존재한다. cMinor.duration.type = 'half' print(cMinor.quarterLength) #하지만 cMinor.pitch 는 불가능 하다. #cMinor.pitches 는 가능하다. pr.. 더보기
[Music21] MuseScore 3 에러 해결 및 경로 처리 Music21을 show()를 통해 MuseScore 3로 열려고 하는데 오류가 난다. 경로상에서 파일을 찾을 수 없다고 하는 것 보니 , MuseScore 3 프로그램 위치를 이상한 곳으로 알고 있나 보다. xml 파일을 MuseScore 3로 사용하기로 기본 설정을 했는데도 에러가 난다면 코드 위에 다음과 같은 코드를 추가해보자. # --- musescore 3을 이용하기 위한 path 설정 us = environment.UserSettings() us['musicxmlPath'] = '내가 설치한 MuseScore 3.exe path ( 대부분 programfiles -> MuseScore3 -> bin 안에 있음 )' us['musescoreDirectPNGPath'] = '내가 설치한 MuseS.. 더보기
반응형