본문 바로가기

C++ 코딩 문제 풀이151

[Programmers] 카펫 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 노란색으로 칠해진 격자의 가로, 세로 길이를 각각 $w, h$라고 하면, 갈색으로 칠해진 격자의 수: $brown = 2w+2h+4$ 카펫의 가로는 $w+2$, 세로는 $h+2$ 이다. 따라서, $w, h \space (w \ge h)$의 값을 찾아내면 카펫의 전체 크기를 알아낼 수 있다. 구현 노란색 격자의 수 $yellow$가 주어지면, 카펫의 세로 길이는 가로 길이보다 .. 2023. 12. 5.
[Baekjoon] 10830번: 행렬 제곱 https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 해결 과정 착안 문제에서 행렬을 곱하는 횟수 $B$가 매우 커서 단순하게 행렬 하나씩 곱하며 계산하면 제한 시간 내에 문제를 해결할 수 없으므로, 자기 자신 행렬을 제곱할 때마다 지수가 2의 거듭제곱으로 증가하는 것을 활용하고자 하였다. 구현 우선 임의의 $n \times n \space (1 \le n \le 5) $ 크기의 정사각행렬 $M_1, M_2$를 곱하여 결과를 도출하는 함수를 구현하고 테스트한.. 2023. 12. 4.
[Programmers] 프로세스 https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 우선순위 큐(priority queue) 자료 구조나 큐(queue) 자료 구조를 이용하면 아래와 같은 어려운 점이 있으므로, std::vector 클래스를 활용하여 문제에서 주어진 동작을 구현하고자 하였다. 우선순위 큐: 우선순위에 따라 인출되는 프로세스가 본래 몇 번째 프로세스였는지 찾는 과정이 복잡하다 큐: 우선순위가 가장 높은 프로세스가 무엇인지 찾는 과정이 복잡하다 .. 2023. 12. 2.
[Baekjoon] 1068번: 트리 https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net 문제 해결 과정 착안 트리 내의 $i$번째 노드에 대해 방문 여부를 표시하면서 삭제될 노드인지를 확인 및 표시하고, 이러한 과정을 부모 노드가 존재하는 경우 재귀적으로 반복 수행하고자 하였다. 구현 위의 방법과 같이 트리 내의 모든 노드에 대해 재귀적으로 상위 노드로 접근하는 경우는 중복된 노드를 계속해서 방문하게 되어 알고리즘의 시간 복잡도가 증가하게 되므로, 노드의 방문 여부를 별도로 표.. 2023. 12. 1.
[Programmers] 튜플 https://school.programmers.co.kr/learn/courses/30/lessons/64065 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 중복되는 원소가 없는 튜플에 대한 집합 표현만 주어지므로, 집합 내에서 중복하여 많이 등장하는 숫자일수록 튜플의 앞에 위치하는 원소임에 착안하여 문제를 해결하고자 하였다. 구현 이를 구현하기 위해, 원소 별로 집합 내에서의 등장 횟수를 카운트할 때 std::unordered_map 클래스를 활용한 다음, pair 형식의 원소들을 std::vector 클래스로 옮겨 등장 횟수에.. 2023. 9. 25.
[Programmers] 괄호 회전하기 https://school.programmers.co.kr/learn/courses/30/lessons/76502 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 스택(stack) 자료 구조를 활용하여 다음과 같은 과정을 통해 괄호 문자열 여부를 판단하고, 해당 과정을 회전된 문자열에 대해서 반복 수행함으로써 괄호 문자열의 수를 카운팅한다. '(', '{', '[' 문자가 주어지는 경우: 스택에 해당 문자를 추가한다. ')', '}', ']' 문자가 주어지는 경우: 스택이 비어있거나 스택의 top에 위치한 문자가 괄호로 짝지어지지 않는.. 2023. 9. 7.