코딩테스트 15

[백준][계수정렬] 과제 안 내신 분..?

오늘의 학습 키워드계수 정렬, 구현 오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/5597 28개의 중복되지 않는 1 이상 30 이하의 정수값을 입력 받는다.이 중 1 이상 30 이하의 수 중 등장하지 않은 값 2개를 출력한다. 어려운 문제는 아니지만 "계수 정렬"이라는 개념을 적용해보기 좋은 문제인 것 같아 게시물로 작성해 본다.계수 정렬에 대해 잘 모른다면 아래 글의 4. 계수 정렬 내용을 확인하세요! ☺️ https://developer-zoyh.tistory.com/30 [알고리즘] 정렬 시리즈 1탄: 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬0. Introduction가장 기본이 되는 4가지 정렬 기법인 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬에 대..

Daily/Coding Test 2025.04.24

[백준][그리디] 회의실 배정

오늘의 학습 키워드정렬, 그리디 알고리즘 오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/1931 10만 이하의 정수 n이 입력으로 주어지고, 이어서 n개의 회의 시간(시작 시간, 종료 시간)이 주어진다.하나의 회의실에 대해 최대 몇 개의 회의가 진행될 수 있는지 찾는 문제이다. 이 때 주의할 점은 아래와 같다.1. 회의 시작 시간과 종료 시간이 동일할 수 있다 → 예: (1, 1) 가능2. 이전 회의 종료 시간에 다음 회의가 시작할 수 있다. → 예: (1, 3), (3, 5) 가능 🌱 나의 시도최종적으로 정렬 + 그리디 알고리즘으로 이 문제를 해결하였다. 이 문제를 처음 보았을 때 그리디 알고리즘으로 시도해보고, 잡히지 않는 반례가 있을 경우 그래프 탐색으로 접..

Daily/Coding Test 2025.04.22

[백준][그리디] 잃어버린 괄호

오늘의 학습 키워드그리디 알고리즘, 문자열 오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/1541 입력으로 주어진 문자열 중 특정 부분에 괄호를 쳤을 때 가장 작은 값을 만드는 문제이다.입력으로는 덧셈/뺄셈 부호(+, -)와 숫자로 구성된 문자열이 주어진다. 🌱 나의 시도마이너스 사이에 있는 덧셈 부호를 모두 괄호로 묶어서 가장 큰 값을 빼 주는 방식으로 접근하였다.따라서 아래와 같은 흐름으로 코드가 진행된다.1. 문자열을 돌면서 마이너스를 만나면 스위치가 켜진다.2. 스위치가 켜지면 마이너스 사이의 값들을 스택에 넣어 모두 더해준 다음, 스택의 값을 전체에서 빼준다.formular = input()switch = False # 마이너스 부호를 만나면 덧셈 부호를..

Daily/Coding Test 2025.04.22

[백준][정렬] 시리얼 번호

오늘의 학습 키워드정렬, 문자열 오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/1431 오늘의 문제는 문자열을 여러 개의 조건으로 정렬하는 문제이다.입력으로 50 이하의 정수 n이 주어지고, 이어서 n개의 문자열이 주어진다.(1) 문자열의 길이(오름차순), (2) 문자열에 포함된 숫자의 합(오름차순), (3) 문자의 사전순 정렬(오름차순)을 기준으로 정렬한다. 🌱 나의 시도파이썬에서 제공하는 sorted 함수를 활용하였다.이미 최적화 되어 있기에 효율성에서도 적합하고, key 파라미터에 lambda 함수를 이용하여 여러 조건에 대한 정렬이 가능하기 때문이다. 정렬 기준 중 2번 조건에 대해 별도의 함수를 구현해주었고, 이를 lambda 함수에 아래와 같이 추가해주..

Daily/Coding Test 2025.04.22

[백준][DFS/BFS] DFS와 BFS (+ 재귀 함수가 아닌 반복문을 이용한 DFS, 우선순위 큐를 이용한 인접 리스트)

오늘의 학습 키워드DFS, BFS, 스택, 큐, 우선순위 큐 오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/1260 그래프를 DFS와 BFS로 탐색한 결과를 출력하는 문제이다.방문 가능한 정점이 여러 개인 경우 정점 번호가 작은 것을 먼저 방문한다. 🌱 나의 시도1. 인접 리스트 구현그래프를 나타내기 위해 우선순위 큐를 이용한 인접 리스트를 구현하였다.이 문제에서는 방문 가능한 정점이 여러 개인 경우 정점 번호가 작은 것부터 순회하여야 하기 때문에, 인접 리스트 내부 인덱스는 정렬된 상태로 유지되어야 한다. 우선순위 큐는 힙으로 구현되어 항상 정렬된 상태를 유지하며 삽입/삭제 시 O(log N)의 시간 복잡도를 가지므로, 리스트를 정렬하는 것보다 우선순위 큐를 ..

Daily/Coding Test 2025.04.16

[알고리즘] 동적 계획법 (Dynamic Programming) + 메모이제이션(Memoization)

1. 소개동적 계획법은 해결하려는 문제를 작은 단위로 쪼개어 접근하는 방식이다. 사전 계산된 값을 여러 번 재활용할 때 효율적이다.(DP를 정의할 때 '문제를 쪼개는 것'에 초점을 맞추는 것이 DP 이해에 방해가 된다고 판단하여 아래 내용으로 수정합니다.) 동적 계획법은 연산 속도를 개선하기 위해 문제를 재설계하는 기법이다.사전에 계산된 값을 재연산 하지 않기 위하여 결과를 저장해둔다. 이를 위해 적절한 단위로 문제를 쪼개는 것이다.즉, 동적 계획법에서 중요한 포인트는 문제를 쪼개는 것이 아니라, 연산이 여러 번 되는 것을 막기 위하여 문제를 재설계하는 것이다.이 과정에서 메모리를 활용하거나 더 작은 단위의 문제로 쪼개어지는 과정이 필요할 수도 있다. (2025.04.28 수정) 나무위키에 와닿는 정의가..

[백준][문자열] 한국이 그리울 땐 서버에 접속하지

오늘의 학습 키워드문자열 오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/9996N개의 문자열에 대해 패턴과 일치하는지 확인하는 문제이다. 일치하면 DA, 그렇지 않으면 NE를 출력한다. 판별할 문자열의 개수 N이 먼저 주어진다.다음으로 판별 기준이 될 패턴이 주어진다. 이 패턴에는 *이 하나 포함되어 있고, *자리에 빈칸을 포함한 특정 문자열이 들어갈 수 있다.이어서 N개의 판별할 문자열들이 주어진다. 🌱 나의 시도1. 입력 받은 문자열에 대해 *을 기준으로 앞(front)과 뒤(back)를 추출한다.2. 맨 앞의 문자열이 front와 일치하고, 맨 뒤의 문자열이 back과 일치하면 DA를 출력한다.3. 그 외 NE를 출력한다. 단, 주의할 점이 있다.이 문제에서..

Daily/Coding Test 2025.04.11

[백준][스택] 쇠막대기

오늘의 학습 키워드스택, 문자열 오늘의 회고🌱 오늘의 문제https://www.acmicpc.net/problem/10799오직 소괄호만을 이용하여 쇠 막대기와 레이저의 위치를 나타낸 입력이 주어진다. 입력의 길이는 최대 10만이다. 🌱 나의 시도이 문제에서 중요한 포인트는 레이저가 한 번 등장할 때마다 현재 겹쳐져 있는 쇠 막대기의 개수만큼이 잘리게 된다는 것이다.조금 더 구체적으로 로직을 정리해 보면 아래와 같다. 1. 현재 들어온 입력에 대해 쇠 막대기인지 레이저인지 판단한다.2. 만약 쇠 막대기라면 현재 쇠 막대기 개수를 1 증가시킨다.3. 만약 레이저라면 현재 저장되어 있는 쇠 막대기 개수만큼 정답 값에 더해준다.4. 위 과정을 반복한 후 최종적으로 몇 개의 쇠 막대기가 잘렸는지 판단해준..

Daily/Coding Test 2025.04.11

[응용] DFS와 2차원 배열 내 영역의 최대 개수 구하기

1. 개요DFS 알고리즘을 적용한 문제 유형으로 2차원 배열에 포함된 특정 영역의 최대 개수를 구하는 문제가 많이 출제된다.아래 두 문제를 풀어보며 이러한 문제 유형에 대해 이해하게 되어, 그 내용을 정리해보려고 한다. 이 글에서는 내가 이해한 개념을 자세하게 풀어서 정리하고, 관련 문제의 코드도 함께 살펴 볼 예정이다.  단, 이 글은 DFS 알고리즘에 대해 이해하고 있다는 가정 하에 설명을 진행한다.만약 DFS 알고리즘의 개념이나 원리를 잘 모른다면 아래 글을 참고하기를 추천한다.https://developer-zoyh.tistory.com/17 [알고리즘] DFS(Depth-First Search)와 BFS(Breadth-First Search)0. IntroductionDFS와 BFS를 별도 게시..

[알고리즘] DFS(Depth-First Search)와 BFS(Breadth-First Search)

0. IntroductionDFS와 BFS를 별도 게시물로 정리하려고 했으나 결국 하나의 게시물로 정리하게 되었다.둘은 이름이 비슷해서인지 잘 헷갈리는 것 같다.같은 게시물 안에서 동일한 그래프로 비교하면서 보면 더 잘 이해할 수 있을 것이라고 판단하였다.단, BFS, DFS 문제풀이는 본 게시물에서 다루지 않는다. 앞으로 DFS, BFS 문제를 공부하면서 차근차근 하나씩 추가해보겠다. 1. DFS (Depth-First Search, 깊이 우선 탐색)1. 정의이름에서 알려주는 것처럼 깊이를 우선적으로, 즉, 가장 깊이 위치하는 노드까지 탐색하는 알고리즘이다.DFS 문제를 풀 때는 스택을 활용하면 더 쉽게 해결할 수 있다.이것은 예시를 보면 더욱 잘 이해할 수 있으니 예시를 함께 보면서 확인하도록 하자...

728x90