본문 바로가기

C++ 코딩 문제 풀이151

[Programmers] 영어 끝말잇기 https://school.programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 주어진 규칙에 따라 $i = 2, 3, ..., n$에 대하여, $i$번째 사람이 성공적으로 끝말잇기를 하는지 여부를 판단한다. 이때 이미 등장한 단어인지를 확인하는 과정을 위해 해시 맵(hash map) 자료 구조를 활용하여 문자열에 대한 탐색을 빠르게 수행하고자 하였다. 구현 해시 맵 자료 구조를 사용하기 위하여 std::unordered_map 클래스 및, 해당 클래스의.. 2023. 8. 27.
[Programmers] 점프와 순간 이동 https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 건전지 사용량을 줄이기 위해서는 최대한 순간이동을 활용해야하므로, 가능한 한 적은 양의 건전지 사용량으로 이동하고자 하는 거리를 2의 배수로 맞춘 뒤 순간이동을 활용한다. 구현 [스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~ 더보기 int solution(int n) { if (n > 1) { if (n % 2) return solution(n / 2) + .. 2023. 8. 27.
[Baekjoon] 1012번: 유기농 배추 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 문제 해결 과정 착안 상하좌우로 연결된 배추들 사이에는 하나의 배추흰지렁이만 있어도 해충 예방이 가능하므로, 이를 표현하기 위해 편의상 아래와 같은 과정을 주어지는 배추밭 모양에 따라 반복적으로 수행하여 필요한 총 배추흰지렁이의 수를 계산한다. 배추가 심어진 땅이 발견되면 필요한 배추흰지렁이의 수를 1만큼 증가시킨다. 깊이 우선 탐색(depth-first search, DFS) 또는 너비 우선 탐색(bread.. 2023. 8. 24.
[Baekjoon] 11660번: 구간 합 구하기 5 https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 문제 해결 과정 착안 이차원 배열 내에서 $x_1$행 $y_1$열을 좌상단, $x_2$행 $y_2$열을 우하단($x_2 \geq x_1, \space y_2 \geq y_1$)으로 하는 사각형 내의 숫자들의 누적 합을 계산하기 위해, 주어진 이차원 배열과 크기가 같은 배열을 선언하여 동적계획법(dynamic programming)에 활용한다. 이때, 메모.. 2023. 8. 24.
[Baekjoon] 14502번: 연구소 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 문제 해결 과정 착안 주어지는 연구소 모양에 대하여 백트래킹(backtracking, 퇴각검색) 알고리즘을 통해 빈 공간에 벽 3개를 세우면서, 바이러스 확산 예상 결과를 너비 우선 탐색(breadth-first search, BFS)을 통해 구하고자 하였다. 구현 편의상 벽의 개수를 파악하기 쉽도록 세우고자 하는 벽의 번호를 3, 4, 5로 정하여 프로그래밍 하였다. 한편 백트래킹 알고리즘에 기반하여 너비 .. 2023. 8. 15.
[Programmers] 다음 큰 숫자 https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 비트 연산을 활용하여 아래의 과정을 통해 규칙에 따라 주어지는 수 $N$의 다음 숫자를 구하고자 하였다. $N$을 이진법으로 표현하였을 때, 가장 오른쪽에서부터 시작하여 왼쪽 방향으로 '01' 비트가 처음 등장하는 부분을 찾는다(아래 코드의 while문). 해당 '01' 비트를 10으로 바꾼다(아래 코드의 while문 다음의 코드 두 줄에 해당). 해당 '01' 비트보다 오른.. 2023. 8. 15.