본문 바로가기

알고리즘66

[알고리즘] 도둑질 python(프로그래머스) 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42897# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 해결 전략이 문제는 원형으로 배치된 집들에서 도둑이 최대 금액을 털 수 있는 경우를 찾는 동적 계획법(DP) 문제입니다. 핵심은 다음과 같습니다:원형 구조 처리: 첫 번째 집을 털면 마지막 집을 털 수 없고, 반대 경우도 마찬가지입니다.Case 1: 첫 번째 집을 터는 경우 (마지막 집 제외)Case 2: 첫 번째 집을 털지 않는 경우 (마지막 집 포함 가능)→ 두 가지 경우로 분리하여 계산합니다:DP 배열 설계:dp[i][0]:.. 2025. 2. 13.
[알고리즘] 메뉴 리뉴얼 python (프로그래머스) https://school.programmers.co.kr/learn/courses/30/lessons/72411 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr이번 글에서는 Python을 사용해 코딩 테스트 문제를 해결한 방법을 공유합니다. 문제는 특정 고객 주문 기록을 바탕으로 가장 자주 등장하는 단품 메뉴 조합을 찾아 코스요리 메뉴로 구성하는 것입니다. 이 과정에서 itertools 모듈의 combination와 lambda 정렬 함수를 활용해 해결했습니다. 문제 풀이와 함께 코드의 각 부분을 자세히 설명하겠습니다.문제 요약여러 손님이 단품 메뉴를 조합해 주문합니다.특정 개수의 단품 메뉴를 조합해 .. 2025. 2. 12.
[알고리즘] 카드 짝 맞추기(프로그래머스) 코드 동작 및 알고리즘 설명1. 최단 경로 탐색 (firstRoute 함수)카드 선택 과정에서 커서 이동은 매우 중요합니다.이동은 두 가지 방식으로 가능하는데, 한 칸씩 이동하는 방법과 Ctrl+방향키를 이용해 한 번에 여러 칸 이동하는 방법입니다.이를 위해 **BFS(너비 우선 탐색)**를 사용하여 현재 위치에서 목표 위치까지의 최소 이동 횟수를 구합니다.1-1. 행 이동 (goRow)목적: 현재 위치의 행에서 목표 행까지 이동할 때, 한 칸 이동과 Ctrl 이동(빈 칸 건너뛰기)을 모두 고려합니다.동작 방식:시작점에서 시작하여, 상하 두 방향(dir이 1 또는 -1)으로 인접한 칸으로 이동할 수 있는지 확인합니다.또한, 연속된 빈 칸들을 뛰어넘어 카드가 있는 칸 또는 보드 끝까지 이동할 수 있도록 w.. 2025. 2. 8.
[알고리즘] 연구소3 python(boj 17142) 백준 - 연구소 3 문제 풀이문제 분석이 문제는 N×N 크기의 연구소에서 M개의 바이러스를 활성화시켜 모든 빈 칸에 바이러스를 퍼뜨리는 최소 시간을 구하는 문제입니다. 주요 조건은 다음과 같습니다:바이러스는 활성/비활성 상태가 있음활성 바이러스는 상하좌우로 동시에 퍼짐활성 바이러스가 비활성 바이러스를 만나면 활성화됨M개의 바이러스만 활성화 가능풀이 과정1. 초기 설정N, M = list(map(int, input().split()))virus = [] # 바이러스 위치 저장board = [] # 연구소 상태 저장targetCount = 0 # 바이러스를 퍼뜨려야 하는 빈 칸의 수입력으로 받은 연구소 상태에서 바이러스의 위치를 따로 저장합니다.targetCount는 바이러스를 퍼뜨려야 하는 빈 칸(0.. 2024. 11. 15.
[알고리즘] 감시 python (백준 15683) https://www.acmicpc.net/problem/15683 CCTV 감시 문제 풀이 설명1. 문제 개요N×M 크기의 사무실에 여러 대의 CCTV가 설치되어 있음CCTV는 1~5번까지 5종류가 있으며, 각각 감시할 수 있는 방향이 다름CCTV는 90도씩 회전 가능하며, 벽을 통과할 수 없음목표: CCTV 방향을 적절히 조절하여 사각지대를 최소화2. 주요 자료구조 설명CCTV 방향 정의dirs = { 1: [[(1, 0)], [(0, 1)], [(-1, 0)], [(0, -1)]], # 1번 CCTV: 한 방향 2: [[(1, 0), (-1, 0)], [(0, 1), (0, -1)]], # 2번 CCTV: 양방향 3: [[(-1, 0), (0.. 2024. 11. 14.
[알고리즘] [모의 SW 역량테스트] 미생물 격리 python(SWEA 5653) 코드 풀이 과정초기 설정:dirs 딕셔너리를 사용하여 각 이동 방향에 따른 좌표 변화를 설정합니다.spin 딕셔너리를 통해 약품 셀에 도달했을 때 반대 방향으로 변환하는 룰을 정의합니다.입력 받기:N, M, K 값을 입력 받고, 초기 군집 상태를 bugs 리스트에 저장합니다.next 함수 정의:각 시간 단위마다 군집 이동 및 병합을 계산하는 함수입니다.board 딕셔너리로 이동 후의 각 위치에 대해 군집들을 저장하여 병합할 수 있도록 합니다.각 위치에서 미생물 수가 가장 많은 군집의 방향을 기준으로 최종 방향을 결정합니다.가장자리 셀에 도달하면 반대 방향으로 변환하고, 미생물 수를 절반으로 줄이는 처리를 수행합니다.격리 시간 반복 처리:for _ in range(M) 루프를 통해 M 시간 동안 next .. 2024. 11. 12.