[백준] 25954 LCS 9 C++,번외 PyPy3
·
코딩/백준-알고리즘
최적화와 포인터 활용을 통한 효율적인 DP 알고리즘 구현C++의 강력한 최적화 기능과 효율적인 메모리 관리 기법을 활용한 DP 알고리즘을 소개합니다.이 코드는 두 문자열을 입력받아 특정 계산을 수행하며, #pragma GCC optimize와 같은 최적화 기법과 포인터를 활용해 성능을 극대화한 예시입니다. 코드의 주요 특징GCC 최적화 옵션:코드 상단에 #pragma GCC optimize("O3,unroll-loops")를 추가하여 컴파일러가 가능한 한 성능을 극대화하도록 설정합니다. unroll-loops는 반복문 언롤링을 통해 실행 속도를 높입니다.메모리 사용 최적화:short 타입을 사용하여 메모리를 절약합니다. 배열 크기는 최대 7000 x 7000이므로, int 대신 short(2바이트)를 선..
[백준] Round words Python 3
·
코딩/백준-알고리즘
문자열 LCS 문제를 비트마스크로 풀어보기LCS(Longest Common Subsequence, 최장 공통 부분 수열)는 문자열 문제에서 자주 등장하는 주제입니다. 두 문자열 간에 공통된 부분 수열 중 가장 긴 길이를 구하는 이 문제는 전통적으로 DP(Dynamic Programming)를 사용해 해결합니다. 그러나 오늘은 비트마스크를 활용하여 LCS 문제를 빠르고 효율적으로 푸는 방법과 이를 응용한 문제를 알아보겠습니다.비트마스크를 이용한 LCS 계산주어진 코드는 문자열 a와 b의 LCS 길이를 비트마스크로 계산하는 방식입니다. 비트마스크는 메모리를 효율적으로 사용하면서 대규모 연산을 빠르게 처리할 수 있는 강력한 도구입니다.핵심 로직b 문자열의 비트마스크 준비b에서 각 알파벳의 등장 위치를 기록합니..
[Python 3] 재귀 깊이 설정하기
·
코딩/개인 PT
1. 재귀 깊이 기본 제한 확인Python의 기본 재귀 깊이 제한은 sys.getrecursionlimit()을 통해 확인할 수 있습니다. 대부분의 시스템에서는 기본값이 1000입니다.import sysprint(sys.getrecursionlimit()) # 기본값: 10002. 재귀 깊이 늘리기sys.setrecursionlimit()을 사용하여 재귀 깊이 제한을 늘릴 수 있습니다.import syssys.setrecursionlimit(2000) # 재귀 깊이를 2000으로 설정 EX codeimport syssys.setrecursionlimit(1500) # 재귀 깊이를 1500으로 설정def recursive_function(n): if n == 0: return "완료..
[백준] 18439 LCS 6 C++
·
코딩/백준-알고리즘
효율적인 비트셋 기반 LCS(Largest Common Subsequence) 구현두 문자열 사이의 최장 공통 부분 수열(Longest Common Subsequence, LCS)은 컴퓨터 과학에서 자주 등장하는 문제입니다. 일반적인 동적 계획법(DP)을 활용한 방식은 O(n*m)의 시간 복잡도를 가지며, 두 문자열의 길이가 클수록 메모리 사용량과 실행 시간이 증가합니다. 1. 문제 정의주어진 두 문자열 a와 b에 대해:공통으로 존재하는 문자의 순서를 유지하는 가장 긴 부분 수열의 길이를 계산해야 합니다.예를 들어:a = "ACDBE", b = "ABCDE"가 주어졌을 때, 두 문자열의 LCS는 "ACDE"이며 길이는 4입니다.2. 알고리즘의 핵심 아이디어비트셋 기반 LCS 알고리즘은 아래의 원리로 작동..
[Python 3] 일정 관리기 [미완성]
·
코딩/개인 PT
import tkinter as tkfrom tkinter import messagebox, ttkimport jsonfrom datetime import datetimetry: from tkcalendar import Calendar TKCALENDAR_AVAILABLE = Trueexcept ImportError: TKCALENDAR_AVAILABLE = False# 데이터 파일 경로DATA_FILE = "todo_advanced_data.json"class ToDoApp: def __init__(self, root): self.root = root self.root.title("Advanced To-Do List App") self.root..
[Python 3] 벽돌깨기 게임
·
코딩/개인 PT
# breakout_game_with_extra_life_and_particles.pyimport pygameimport sysimport random# 초기화pygame.init()# 색상 정의WHITE = (255, 255, 255)RED = (255, 0, 0)ORANGE = (255, 165, 0)YELLOW = (255, 255, 0)GREEN = (0, 255, 0)BLUE = (0, 0, 255)BLACK = (0, 0, 0)# 화면 설정SCREEN_WIDTH = 800SCREEN_HEIGHT = 600INFO_HEIGHT = 100 # 상단 정보 표시 공간 높이screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.di..
[Python 3] 지렁이 게임
·
코딩/개인 PT
[들어가기 앞서 터미널에 사전적으로 설치해야 합니다]pip install pygame1. 게임의 기본 설정게임을 시작하기 위해서는 먼저 Pygame을 초기화해야 합니다. 이때, 게임 창의 크기, 색상 등을 설정하는 것이 중요합니다. 화면의 크기를 600x400 픽셀로 설정하고, 뱀의 움직임과 먹이가 표시될 영역을 정의합니다. 화면의 상단 100 픽셀은 점수 영역으로 활용하고, 나머지 영역에서 뱀과 먹이가 활동하게 됩니다.width = 600height = 400dis = pygame.display.set_mode((width, height))pygame.display.set_caption('Snake Game')2. 뱀과 먹이의 기본 동작뱀은 일정 크기의 블록으로 이루어져 있으며, 사용자의 입력에 따라 ..
펌웨어 사전기초
·
코딩/개인 PT
1. 펌웨어란?펌웨어는 하드웨어와 소프트웨어의 중간에 위치한 프로그램으로, 주로 하드웨어 장치 내부에 내장되어 해당 장치를 제어하거나 특정 기능을 수행하는 역할을 합니다. 펌웨어는 읽기 전용 메모리(ROM) 또는 플래시 메모리에 저장되어 있어, 전원이 꺼져도 내용이 유지됩니다. 대표적인 예로는 스마트폰, 프린터, 라우터, 자동차의 제어 시스템 등에 사용됩니다.펌웨어와 소프트웨어의 차이점펌웨어(Firmware):하드웨어에 밀접하게 통합되어 있으며, 특정 하드웨어 장치를 제어.주로 C, 어셈블리 언어 등 저수준 언어로 개발.업데이트는 제조사에서 제공하는 경우가 많으며, 사용자가 직접 수정하기 어려움.소프트웨어(Software):일반적인 컴퓨터 시스템에서 다양한 용도로 사용.고수준 언어로 개발 가능.사용자가 ..
[백준] 1046 그림자 Python 3
·
코딩/백준-알고리즘
문제 접근 방식방의 구조를 입력받고, 광원의 위치와 벽의 개수를 파악합니다.광원으로부터 빛이 퍼지는 영역을 계산합니다. 이때 빛이 벽에 의해 차단되는 경우를 고려합니다.각 방향(상하좌우)으로 빛이 퍼져나가며, 빛이 닿는 영역을 계산합니다.최종적으로 빛이 닿는 영역의 총 면적을 계산하여 빈 공간에 대한 비율을 출력합니다.각 함수의 역할 및 설명1. get_triangle_area 함수이 함수는 주어진 삼각형의 면적을 계산합니다. 삼각형의 세 점 중 두 점이 x축 위에 있을 때, 삼각형의 밑변과 높이를 이용해 면적을 계산합니다. 이 함수는 빛이 벽에 의해 차단되는 경우 삼각형 면적을 빼기 위해 사용됩니다.2. get_light_area_and_next 함수이 함수는 현재 y 좌표에서 빛이 비추는 영역과 다음..