본문 바로가기

C++ 코딩 문제 풀이151

[Baekjoon] 2447번: 별 찍기 - 10 https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 문제 해결 과정 착안 메모리를 절약할 수 있는 더 좋은 방법이 있을 수 있지만, 간편한 방법으로 문제를 해결하고자 하였다. 프랙탈(fractal) 형태를 먼저 재귀적으로 구하여 저장한 다음, 한 행씩 문자열로 변환하여 출력해 문제를 해결하고자 하였다. 구현 프랙탈 모양의 형태를 최대한 적은 메모리를 사용해 저장해보려고 bool 형 배열을 이용해보았다. 별이 찍히는 부분을.. 2023. 7. 24.
[Programmers] 정수 삼각형 https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 동적계획법(dynamic programming)을 통해 가장 아래 층의 숫자들부터 인접한 두 개씩 비교하여 위의 숫자로 더해나가는 방식으로 문제를 해결하고자 하였다. 구현 [스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~ 더보기 #include #include using namespace std; int solution(vector triangle) { for.. 2023. 7. 21.
[Baekjoon] 18405번: 경쟁적 전염 https://www.acmicpc.net/problem/18405 18405번: 경쟁적 전염 첫째 줄에 자연수 N, K가 공백을 기준으로 구분되어 주어진다. (1 ≤ N ≤ 200, 1 ≤ K ≤ 1,000) 둘째 줄부터 N개의 줄에 걸쳐서 시험관의 정보가 주어진다. 각 행은 N개의 원소로 구성되며, 해당 위치 www.acmicpc.net 문제 해결 과정 착안 우선순위 큐(priority queue) 자료 구조를 활용하여, 바이러스 번호가 낮은 순으로 먼저 너비 우선 탐색(breadth-first search, BFS)을 수행함으로써 문제를 해결하고자 하였다. * 우선순위 큐 대신, 배열 및 정렬 알고리즘을 사용하여 해결하면 속도 측면에서 더 유리한 것 같다. 구현 좌표를 나타내기 위한 구조체 Coor.. 2023. 7. 21.
[Baekjoon] 1541번: 잃어버린 괄호 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 문제 해결 과정 착안 주어지는 식에 괄호를 적절히 씌워 결과값이 최소가 되게 하려면, 최대한 뺄셈을 많이 수행하고 큰 숫자를 빼는 것과 같으므로, 뺄셈을 기준으로 식을 나누어 괄호를 씌우는 것과 같다 (또는, 주어진 식에서 덧셈 연산을 뺄셈 연산보다 높은 우선순위로 계산한 다음 왼쪽부터 순차적으로 뺄셈을 수행하는 것과 같다). 구현 주어진 식에 대해 덧셈 연산을 우선적으로 진행한 다음, 식의.. 2023. 7. 17.
[Baekjoon] 11053번: 가장 긴 증가하는 부분 수열 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제 해결 과정 착안 이번 포스트에서 다루는 문제는 최장증가부분수열(longest incresing subsequence, LIS)을 구하는 문제인데, 이 문제는 다음과 같은 점들을 고려하여 효율적으로 해결할 수 있다. $n$ 개의 항으로 이루어진 수열 $\{a_i\} \space (1 \leq i \leq n)$에 대.. 2023. 7. 15.
[Baekjoon] 16139번: 인간-컴퓨터 상호작용 https://www.acmicpc.net/problem/16139 16139번: 인간-컴퓨터 상호작용 첫 줄에 문자열 $S$가 주어진다. 문자열의 길이는 $200,000$자 이하이며 알파벳 소문자로만 구성되었다. 두 번째 줄에는 질문의 수 $q$가 주어지며, 문제의 수는 $1\leq q\leq 200,000$을 만족한다. 세 번째 www.acmicpc.net 문제 해결 과정 착안 입력으로 주어지는 문자열의 길이 $n$이 매우 길기 때문에 ($1 \leq n \leq 200000$) 동적계획법(dynamic programming)을 통해 각 알파벳 소문자 별로 인덱스 0부터 $i \space (i < n)$ 까지 해당 알파벳이 등장하는 횟수의 누적합을 먼저 계산하고, 구간이 주어질 때마다 누적합을 이용해.. 2023. 7. 14.