최근에 코테 준비도 그렇고 PS(Problem Solving)에 다시 재미를 붙여서 BOJ 풀밭 가꾸기 중이다.
1년동안 휴면 상태이던 codeforce도 다시 시작해봤다. (언어의 장벽을 돌파해서) 색깔권까지 올려 놓는게 목표다.
과거에 파이썬으로 PS를 하다가, 수많은 시간초과 억까와 학교 수업이 c, c++ 위주였기에 눈물을 삼키며 파이썬을 놓아줬었는데 막상 대회 준비를 하고, 코테 준비를 하다보니 역시 파이썬이 편하다
본인은 파이썬 IDE(갑자기 궁금해서 찾아봤는데 Integrated Development Environment 라고 한다)로 Atom을 쓰는데 Github에서 만든 editor이다.
원래는 파이참, spyder 이것 저것 써봤는데 Atom이 GUI가 간결하기도하고, Github와 연결성도 좋아서 즐겨쓰게 되는것 같다(무엇보다 색깔이 마음에 든다)
Atom에도 vscode처럼 여러 플러그인을 설치해서 쓸수가 있다. 예를들어 자동완성이나 코드 미니맵이나 ssh 연결 등등 오픈소스이고 node.js 기반 plugin이다보니 유저들이 직접 만들어서 배포하는 유용한 애드온이 많다
본인도 원래 autocomplete-python이라는 파이썬 자동완성 플러그인을 설치해서 썼는데, 생각보다 본인에게 필요없는 부분에서 snippet(작은조각, 재사용할 수 있는 소스코드)이 작동하는 경우가 많았고, 무엇보다 PS를 하는데 있어서 본인이 쓰던 문법스타일에 맞지않게 자동완성 시키거나 있었으면 하는 기능이 없는 경우가 많았다.
그래서 '내가 하나 짜놓고 보강하면서 써먹자'라는 마인드로 이런 애드온 공부도 할겸 미니(?) 사이드 프로젝트를 시작했다.
목표는 PS를 위한 python snippet을 만드는거다
1. PS 기초 세팅과 주요 기초 python 문법
2. PS에 자주 쓰이는 자료구조와 알고리즘
3. 종종 검색해서 쓰는 것들 주석으로 저장해두기
4. github로 버전관리하면서 보강
5. plugin 배포
개발 과정
Atom에는 이미 package 제작을 위한 기본틀? 제작기가 내장되어 있었다.
Ctrl_Shift_P 로 Atom cmd창? 비슷한걸 열어주고
package generator를 실행한다.
설치할 위치를 정해주고(아무곳에나 설치해도 바로가기 형태로 C/User/.Atom/packages 폴더에 들어가서 새로고침시 자동 적용된다)
C:.
│ .gitignore
│ CHANGELOG.md
│ LICENSE.md
│ package.json
│ README.md
│
├─keymaps
│ atom-snippets-python-ps.json
│
├─lib
│ atom-snippets-python-ps-view.js
│ atom-snippets-python-ps.js
│
├─menus
│ atom-snippets-python-ps.json
│
├─snippets
│ python.cson
│
├─spec
│ atom-snippets-python-ps-spec.js
│ atom-snippets-python-ps-view-spec.js
│
└─styles
atom-snippets-python-ps.less
이런 구조로 폴더가 생성되고, snippets라는 폴더에 python.cson을 만들어줬다
cson파일은 약간 json 같은 느낌이었는데, 그런 부류의 문법 체계 중 하나인듯하다(나중에 다시 알아보고 정리하겠음)
'.source.python':
'설명':
'prefix': '어떤걸 치면'
'body': '''
어떤걸 보여줄지
'''
'설명':
'prefix': '어떤걸 치면'
'body': '''
어떤걸 보여줄지
'''
이 형태로 짜면 된다. $n 으로 다음 키보드 커서 위치를 조정할 수 있었다.
2022.03.13. 기준
'.source.python':
# Snippets for ps
'PS Init Settings':
'prefix': 'ps'
'body': '''
import sys
# sys.setrecursionlimit(10**5)
# import math
# from collections import deque
# import heapq
input = sys.stdin.readline
# queue = deque()
stack = []
L = []
ans,cnt = 0,0
$1
'''
# Snippets for codeforce
'Codeforce Init Settings':
'prefix': 'cf'
'body': '''
import sys
# sys.setrecursionlimit(10**5)
# import math
# from collections import deque
# import heapq
input = sys.stdin.readline
# queue = deque()
stack = []
L = []
ans,cnt = 0,0
tc = int(input())
for _ in range(tc):
$1
'''
# Snippets basic grammers
# input
'n,m input':
'prefix': 'nm'
'body': '''
${1:n,m} = map(int,input().split())
$2
'''
'list input':
'prefix': 'Linput'
'body': '''
${1:L} = list(map(int,input().split()))
$2
'''
'2D input':
'prefix': '2dinput'
'body': '''
L = []
for i in range(${1:n}):
L.append(list(map(int,input().split())))
$2
'''
# loop
'for loop':
'prefix': 'for'
'body': '''
for ${1:i} in range($2):
$3
'''
'nested for loop':
'prefix': 'dfor'
'body': '''
for ${1:i} in range($2):
for ${3:j} in range($4):
$5
'''
'2D check':
'prefix': '2dcheck'
'body': '''
for LL in ${1:L}:
print(LL)
$2
'''
# Algorithm
# Data Structure
'Heap Data Structure':
'prefix': 'heap'
'body': '''
heap = []
# heapq.heappush(heap,item)
# heapq.heappop(heap)
# heapq.heapify(heap)
$1
'''
# Example
'':
'prefix': ''
'body': '''
'''
본인이 지금까지 짠 snippets은 다음과 같다.
예를들어 파이썬 파일을 만들어서 PS를 시작하고 싶을때 ps만 치면 아래와 같이 설명과 함께 나타나고
여기서 tab을 쳐주면 아래와 같이 자동완성이 된다.
차차 자주 쓰는 알고리즘 등 추가하며 solve 시간을 줄여보는 방향으로 개선해봐야겠다
'알고리즘' 카테고리의 다른 글
[BOJ] 백준 14938번 서강그라운드 | python 파이썬 코드, 해설, 풀이 (0) | 2023.08.02 |
---|---|
[BOJ] 백준 16202번 MST 게임 | python 파이썬 코드, 해설, 풀이 (0) | 2023.02.13 |
[BOJ] 백준 14217번 그래프 탐색 1 | python 파이썬 코드, 해설, 풀이 (0) | 2023.02.12 |
[BOJ] 백준 14218번 그래프 탐색 2 | python 파이썬 코드, 해설, 풀이 (0) | 2023.02.12 |
[BOJ] 백준 5546번 파스타 | python 파이썬 코드, 해설, 풀이 (0) | 2023.02.10 |