알고리즘 16

[SWEA] 1206. View (S/W 문제해결 기본 - 1일차) / Python 코드

학기가 끝나가면서 다음 분기 준비로 코딩 테스트가 급박해지는 시점, 시간을 내어서 해보자.곧 코테 언어도 JAVA로 바꿔서 연습할 듯 한데이번 주는 급한 마음에 파이썬으로! SW Expert Academy의 D3 난이도 문제로 전에 풀었던 D2 문제보다도 쉬웠다.  T = 10 for test_case in range(1, T + 1): N = int(input()) height = list(map(int, input().split())) result = 0 for j in range(2, N - 2): cur = height[j - 2:j + 3] cur.sort(reverse=True) ..

알고리즘 2024.05.17

[프로그래머스] 미로 탈출 / BFS / Python 코드

BFS/DFS 문제 풀이를 익히기 위해 미로 탈출 문제를 풀었다. Lv.2에 이전에 백준에서 많이 풀어봤던 느낌이라 쉽게 접근하고 풀 수 있었다. 어제 풀었던 문제를 떠올리면서 힌트를 얻기도 했다. 문제 설명 문자열의 배열로 주어진 미로에서 레버를 찍고 출구까지 가는 최단 거리를 구하는 문제이다. 상, 하, 좌, 우로 이동할 수 있으며 (대각선 불가) output으로는 몇 칸을 이동했는지를, 탈출할 수 없으면 -1을 반환한다. 문제 해결 인접한 칸을 방문하면서 최단 거리를 구하는 문제라 BFS를 사용했다. 가장 먼저 구한 답이 최단 거리가 될 것이다. DFS로 푼다면 모든 경우의 수를 다 구하기 때문에 비효율적임 일단 레버를 찍고 탈출구로 갈 수 있으므로 레버까지의 BFS 한 번, 출구까지의 BFS 한 ..

알고리즘 2024.02.13

[프로그래머스] 가장 먼 노드 / 그래프, DFS, BFS / Python 코드

어제 오늘 푼 문제는 난이도 Lv.3의 가장 먼 노드이다. 문제 자체는 어렵지 않았지만 효율적인 풀이를 고민하는 데 노력이 들었다. 알고리즘 공부할 때 봤던 그래프의 개념과 문제 풀이 하면서 익혔던 DFS, BFS 개념 및 구현 방법을 복습할 수 있었던 좋은 문제였다. 문제 설명 1부터 까지의 노드가 존재하는 그래프에서 1번 노드와 가장 먼 노드의 개수를 구하는 문제다. input으로 노드의 개수와 하나의 간선으로 연결된 두 노드의 배열이 list로 주어진다. 문제 해결 이전에 DFS 문제를 많이 풀었기 때문에 자연스럽게 DFS로 풀어야겠다고 생각했는데 막상 코드를 짜고 보니 BFS 비슷한 방법으로 풀고 있었다. 지금 생각해보면 어떤 방법으로 풀어도 상관 없는 것 같다. 먼저 인접리스트로 만들어 놓고 1..

알고리즘 2024.02.12

[프로그래머스] 오픈채팅방 / 2019 Kakao / Python 코드

프로그래머스 매일 한 문제 이상 풀기 도전, 남은 방학을 이렇게 보내보려고 한다. 어제에 이어서 진단 문제로 한 문제를 풀었는데 스택 문제가 너무 쉬워서 한 문제 더 풀었다. 오픈채팅방은 2019년 카카오 블라인드 채용의 기출문제로 Lv.2의 쉬운 문제였다. 카카오 글자만 보고 겁나서 안 풀려고 했는데 막상 풀어보니 오래된 문제라 그런지 풀 만했다. 효율 때문에 런타임 에러가 나와 생각보다 푸는 데 조금 걸렸던 문제다. 문제 설명 사용자들이 채팅방에 들어오고 나가는 안내 메시지를 배열로 반환하는 문제다. 채팅방에 들어오고 나가고 이름을 변경하는 메소드와 유저 ID, 닉네임이 공백 문자로 구분되어 하나의 문자열로 주어진다. 주의사항으로는 사용자가 나갈 때는 닉네임이 들어오지 않는다는 것이 있겠다. 문제 해..

알고리즘 2024.02.10

[프로그래머스] 디스크 컨트롤러 / Heap / Python 코드

많은 기업에서 코딩테스트를 프로그래머스 툴로 푼다는 말을 들었다. 프로그래머스는 코딩테스느 문제가 다양하지 않아서 백준만 풀었는데, 얼마 남지 않은 방학동안 프로그래머스 문제를 풀기로 결정했다. 코딩테스트 문제로 들어가니 수준에 맞는 문제 추천을 위한 진단 문제 풀기가 가능하길래 들어가봤다. 문제 이름이 재미있어 보이는 걸로 골랐는데 Lv.3 문제였던 답게 헤맨 과정이 있어 푸는데 시간이 좀 걸렸다. 문제 설명 한 번에 하나의 작업만 수행할 수 있는 하드디스크를 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 디스크 컨트롤러를 구현하는 함수를 작성, input은 2차원 배열로, output은 평균 시간을 int형으로 반환하면 된다. 문제 해결 문제를 쭉 읽어 봤을 땐 그렇게 어려워 보이..

알고리즘 2024.02.09

[BOJ] 9466. 텀 프로젝트 / DFS / Python 풀이

몇 달 전부터 친구랑 같이 문제를 정해서 함께 풀고 있다. 이번에는 친구가 먼저 풀어봤는데 꽤 어려웠다는 문제를 풀어보기로 했다. 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 백준 9466번 문제로 레벨 골드3에 걸맞는 정답률을 자랑하고 있다. 정답 비율이 23퍼센트밖에 되지 않아서 겁을 먹었지만 풀고 나니 처참한 비율의 이유를 알게 되었다.. 알고 싶지 않았다 문제 이해 문제 설명이 말로 되어 있어서 처음에 이해하기가 어려웠다. 설명을 여러 번 읽어본 후에야 이해할 수 있었는데, 결국은 싸이클이 성립될 때 팀..

알고리즘 2023.06.11

[BOJ] 2636. 치즈 / BFS / Python 풀이

2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 오랜만에 포스팅, 최근 풀고 있는 BFS 문제다. 백준 2636번 문제로 골드4인데 정답률은 50퍼센트를 넘는다.. 친구와 함께 풀다가 몇 가지 힌트를 얻고 한 번에 통과했다 ㅎㅎ 문제 이해 공기와 접촉된 칸은 한 시간이 되면 녹아 없어진다. 이때 치즈로 둘러싸인 구멍은 공기와 접촉된 것으로 치지 않는다. 이 부분의 설명이 이해하기 쉽지 않아서 주춤했다. 접근 문제를 보자마자 너비 우선 탐색으로 접근했고, 처음에는 공기와 닿은 치즈를 어떻게 알아낼지가 고민이었다. 문제 ..

알고리즘 2023.06.02

[BOJ] 2798. 블랙잭 / Brute Force / Python 풀이

얼마 전 PS 공부를 다시 시작했다. 참고할 풀이가 많은 백준으로 선택했고, 분류별, 단계별로 문제를 풀어보려고 한다. 시작으로 브루트포스 문제들을 먼저 풀어보고 있다. 처음 풀어 본 문제는 브론즈 2 난이도의 2798번 블랙잭 문제이다. 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 먼저 문제를 살펴보자. 주어진 N장의 카드 중 3장을 골라 M 미만의 가장 큰 3장의 합을 구하면 된다. 입력과 출력은 다음과 같다. 먼저 정수 N, M을 받고, N장의 카드에 각각 어떤 수가 ..

알고리즘 2023.04.19

[BOJ] 11726. 2xn 타일링 / 파이썬 풀이

11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net n = int(input()) t = [0 for i in range(n+1)] t[1] = 1 t[2] = 2 for i in range(3, n+1): t[i] = t[i-1] + t[i-2] print(t[n]%10007) 런타임 에러 (IndexError) n=1일 때 IndexError: list assignment index out of range 바로 다음 문제도 풀어보기 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를..

알고리즘 2022.02.24