MapleStory Finger Point

전체 글 47

백준 알고리즘 10250번 ACM 호텔 (파이썬)

문제 : 방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고 XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다. 즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다. 손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다. 다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다. 예를 들면 102 호 방보다는 301 호 방을 더 선호하는데, 102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다. 같은 이유로 102 호보다 2101 호를 더 선호한다. 여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에 이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다. 첫 번째 손님은 101 호..

백준 알고리즘 2022.08.08

백준 알고리즘 2869번 달팽이는 올라가고 싶다 (파이썬)

문제 : 땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다. 달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다. 달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오. import math A, B, V = map(int, input().split()) print(math.ceil((V - B) / (A - B))) 코드 설명 : import math A, B, V = map(int, input().split()) # 기본 수식은 (A - B) * x >= V 이다. # x를 기준으로 모두 이항하면, x >= V / (A - B) 가 되는데, # 분자인 V를 그..

백준 알고리즘 2022.08.05

백준 알고리즘 4673번 셀프 넘버 (파이썬)

완벽한 코드가 아닙니다. 문제 : 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다. 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

백준 알고리즘 2022.08.01

PyInstaller 에러 메시지 출력 (바로 꺼짐 이유 확인)

가끔 PyInstaller로 만든 exe 파일을 실행하였을 때, 콘솔 창이 생겼다가 바로 꺼지며 프로그램이 실행되지 않을 때가 있다. 에러 메시지를 확인하고 싶은데 너무 빠르게 사라져서 확인할 수가 없으면 input() 같은 입력 대기 상태 구문을 추가해도 되지만, 직접 코드를 수정해야해서 귀찮다. 그럴 때는 간편하게 1. cmd를 켠다. 2. exe 파일 경로를 입력한다. 3. Enter를 누른다. 이 망할 opencv 에러는 일주일째 해결 중

PyQt5 이미지 비율 맞추기

기본적으로 Qt에서 이미지를 넣기 위해서 빈 QLabel을 선언한 뒤에 넣어야 한다는 건 다들 알고 있을 것이다. 막상 이미지를 넣어보면 내 생각대로 안 들어가지는 게 한두 번이 아니었다. 그럴 때마다 구글링 하고 '아 이렇게 했었지..' 하며 또 까먹는다. 그래서 그냥 나도 내 머릿속을 정리할 겸 이해하기 쉽게 설명할 거다. 솔직히 아래 그림 보면 끝나긴 한다. 그래도 예제 코드를 만들어 보았다. 귀여운 비둘기 사진으로 테스트해보겠다. 첫 번째 코드 - import os from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QMainWindow, QLabel from PyQt5.QtCore import Qt class ThumbnailView(QMa..

Development/GUI 2022.06.20

PyQt5 버튼 애니메이션

최근 UI 애니메이션에 대해 관심이 많아졌다. 그중 Qt Creator라는 툴을 발견하게 되었는데, 그동안 내가 했던 UI는 기본 중의 기본이었구나..라고 깨달을 만한 여러 다양하고 멋진 것들이 많았다. 하나씩 둘러보는 중 느낀 점이 있었는데, 중급 또는 고급 UI들은 대부분 QML을 사용하여 제작한다는 것이었다. 무슨 파도 시뮬레이터도 있었고, 자동차 클러스터 같은 여러 재밌는 위젯들이 많았다. 지금까지 PyQt5 내장 위젯들로만 사용해서 별거 없네 생각하다가 신세계를 경험했다.. 또 QML을 공부하기에 막막하던 참에, 구글링하다 기본 툴로 재미난 기능을 적용하는 예제를 발견했다. 바로 버튼에 마우스를 올려둘 시 Gradient를 적용할 수 있다. #!/usr/bin/python3 from PyQt5 ..

Development/GUI 2022.06.15

파이썬으로 파일 자동 삭제 프로그램 만들기

회사에서 만드는 프로그램의 특성상 데이터 저장으로 하드를 되게 많이 쓰고 있다. 주기적으로 저장 공간 관리를 직접 하는데 너무 귀찮아서 하나 만들어 보았다. 사용한 모듈은 os, shutil, psutil이다. psutil은 외부 모듈으로 pip install psutil로 설치하여야 한다. 일단 알고리즘부터 짠 다음, GUI를 통해 만들어보려 한다. 코드는 아래와 같다. #!/usr/bin/env python3 # # Copyright 2021-2022 9th grade 5th class. # # Authors: # 5jx2oh@gmail.com import os import sys import shutil import psutil class FileAutoDelete: """ Delete the ol..

PyQt5 PyQtGraph (+ clickEvent, Animation)

최근에 회사에서 그래프를 그려야 할 프로젝트가 있었다 처음에는 예전에 써봐서 익숙했던 matplotlib을 사용했었다 하지만 나중에 exe 실행 파일을 만들어야 했는데, 이 matplotlib 때문에 고생했다. (+ opencv..) 어차피 PyQt5를 사용하여 구현하는데 여기에도 그래프 관련 모듈이 있겠지 해서 봤는데 꽤나 괜찮은 걸 찾았다 바로 PyQtChart 라는 모듈이다 설치법은 그냥 이름 그대로 install 진행 pip install PyQtChart PyQtChart 안에서도 다양한 그래프, 차트들을 만들 수 있는데 난 PieChart를 그려보았다. import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.QtC..

Development/Graph 2021.10.18

PyQt5 종료 Fade out 이벤트

라고 제목을 거창하게 적어보았지만 사실은 페이크다. 마음 같아서는 animation 함수 (QPropertyAnimation)를 사용해서 해보고 싶었지만, 그런 마음은 접어두기로 한다. 코드는 아주 간단하다. 이걸 글로 써서 올리기에 창피할 정도 import sys import time from PyQt5.QtWidgets import QWidget, QApplication, QGraphicsOpacityEffect, QPushButton, QVBoxLayout class FadeWindow(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) button = QPushButton(self) button.setText("Clo..

Development/GUI 2021.07.08

[3] Pyiano - 소리 멀티 출력 [끝]

그동안 건반을 치면 한 번에 하나의 소리만 출력됐다. 예를 들어 도를 치고 바로 레를 치면 도 소리가 멈추며 레 소리로 바로 넘어갔다. 멀티 작업이 되지 않았던 것이다. 알고 보니 저번에 소리 파일을 재생하는 코드를 개별로 설정만 해주면 끝나는 문제였다. def click_C(self, event): self.C.setStyleSheet("background-color: #d1d1d1;") file = "audio/25.MP3" pygame.mixer.init(self.freq, self.bitsize, self.channels, self.buffer) pygame.mixer.music.load(file) pygame.mixer.music.play() 각 클릭 이벤트 함수마다 그냥 pygame 모듈에 설..

[2] Pyiano - 클릭 시 소리 출력

이번에는 간단하게 진행할 것이다. 지난번에는 건반 클릭 이벤트만 처리했는데, 누르면 피아노 소리가 나도록 설정해야 한다. 일단 먼저 피아노 소리 파일이 있어야 하는데 구글링 해보니 쉽게 찾을 수 있었다. 여기 있다. 출처 각각 mp3 파일과 wav 파일이 있는데, 파이썬에는 'wave'라는 모듈이 있어 wav 파일을 쉽게 읽고 쓸 수 있다. wave 모듈을 사용했는데, 왜인지 모르겠지만 재생이 되지 않아 부득이하게 그냥 간편한 pygame 모듈을 사용한다. 아 그리고 일단 loop 문은 지운 상태로 코드를 작성했다. 왜냐면 loop문이 끝나야 음악 파일이 재생이 된다.. import os import sys from PyQt5 import QtWidgets, QtGui, QtCore from pyiano..

[1] Pyiano - Ui 제작

어렸을 적 코흘리개였을 때, 난 피아노 학원에 다녔었다. 아마 체르니 90번까지 배웠던 기억이 난다. 그렇다. 체르니 90번은 없다. 그렇기 때문에 파이썬으로 피아노를 만들어 보려고 한다. 먼저 Qt Designer를 실행하여 기본 Ui 틀을 제작한다. ui파일을 다 제작하였으면 이제 파이썬 파일로 변환해준다. pyuic5 -x pyiano.ui -o pyiano.py 위의 명령을 cmd에서 실행해준다. 그럼 이제 이벤트 처리를 할 코드를 작성해야 한다. import sys from PyQt5 import QtWidgets, QtGui, QtCore from pyiano import Ui_MainWindow class Pyiano(Ui_MainWindow): def __init__(self): super..

파이썬 에러 메시지 쉽게 저장하기

프로그램을 만들고 실행했는데 이유 없이 종료된다면 어디서 에러가 발생했는지, 어떤 에러인지 알아야 한다. 파이썬의 traceback 모듈과 try except 구문이면 에러를 찾을 수 있다. import time import traceback def ErrorLog(error: str): current_time = time.strftime("%Y.%m.%d/%H:%M:%S", time.localtime(time.time())) with open("Log.txt", "a") as f: f.write(f"[{current_time}] - {error}\n") try: print(A) except Exception: err = traceback.format_exc() ErrorLog(str(err)) A가 무..

PyQt5 메뉴바 클릭 시 텍스트 변경해보기

PyQt5를 공부하면서 메뉴바를 가지고 이리저리 가지고 놀아보았는데, 클릭 시 텍스트가 바뀌면 어떨까 해서 한번 만들어보았다. 이번에는 PyQt5를 더 효율적이고 쉽게 사용할 수 있는 방법 중에 하나인 "Qt Designer"를 사용하여 만들어 보았다. Qt Designer를 처음 쓸 때는 어떻게 적용하는지 애를 먹었는데, 점점 사용법을 익히다 보니 GUI(Graphical User Interface)를 만들 때 이렇게 편할 수가 없다. Designer를 처음 실행하면 다음과 같은 화면이 나오게 되는데, 나는 Main Window를 선택하여 만들었다. Main Window를 선택하고 Create를 누르게 되면, 정품인증하고 싶어요 이제 자유롭게 GUI를 만들 수 있는 화면이 나온다. 내부 윈도우의 상단을..

Development/GUI 2020.09.21