본문 바로가기

C++ 코딩 문제 풀이151

[Programmers] n^2 배열 자르기 https://school.programmers.co.kr/learn/courses/30/lessons/87390 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 $n \times n$ 크기의 행렬 matrix[][]는 한 행에 $n$ 개의 요소를 가지므로, 각각의 행을 이어붙여 1차원 배열로 만들었을 때의 $k$ $(1 \le k \le n^2)$ 번째 요소는 $k$ 를 $n$으로 나눈 몫을 $q$, 나머지를 $r$ 이라고 했을 때 matrix[$q$][$r$] 이다. 한편, 문제에서 주어진 규칙에 따라 $n \times n$ 크기의.. 2024. 1. 2.
[Programmers] 할인 행사 https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 구매하고자 하는 물건의 수는 항상 10 개이며 XYZ 마트에서 10 일 연속으로 할인받는 경우만 카운팅하는 문제이므로, discount[] 배열에서 10 일 단위의 프레임을 만든 다음 한 칸씩 이동시켜보면서 조건을 만족하는지 확인한다. 구현 discount[] 배열의 처음 요소부터 시작하여 매번 10 개 품목에 대해 계산을 반복하면 비효율적인 시간 복잡도를 가지게 되므로, .. 2024. 1. 1.
[Programmers] 연속 부분 수열 합의 개수 https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 길이가 $n$인 원형 수열이 주어졌을 때, 각각의 요소에 대하여 길이가 1, 2, $\cdots, n$ 인 부분 수열의 합을 동적계획법(dynamic programming)을 활용해 구한 다음 중복되지 않는 합들의 갯수를 센다. 구현 중복되지 않는 부분 수열의 합들의 갯수를 세기 위해 std::unordered_set 클래스를 활용하였다. [스포 주의] 아래 '더보기'를 누.. 2023. 12. 31.
[Programmers] 짝지어 제거하기 https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 문자를 짝끼리 비교하여 같은 문자면 지우는 과정을 반복하면, 지워지는 문자가 있을 때 처음부터 다시 과정을 반복해야하므로 시간 복잡도 측면에서 매우 비효율적이다. 따라서, 스택(stack) 자료 구조의 후입선출(LIFO) 원리를 활용해 문제를 해결한다. 구현 주어진 문자열에 대해 앞에서부터 문자 하나씩 잘라서, 현재 스택의 top과 비교해 두 문자가 같으면 문자 하나를 스택에.. 2023. 12. 28.
[Programmers] 최댓값과 최솟값 https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 문자열의 마지막 문자에 도달하거나 공백이 나오기 이전까지의 문자를 숫자로 변형하여 하나씩 읽어가며 최솟값, 최댓값 여부를 판단한다. 구현 [스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~ 더보기 #include using namespace std; string solution(string s) { int min = 2147483647; int max = -21.. 2023. 12. 28.
[Baekjoon] 1049번: 기타줄 https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 문제 해결 과정 착안 기타줄의 패키지 가격과 낱개 가격을 각각 별도의 배열에 저장한 다음 오름차순으로 정렬하고, 패키지로 구매하는 경우와 낱개를 구매하는 경우를 비교하여 문제를 해결한다. 구현 필요한 기타줄의 수를 $N$이라 할 때, 다음과 같이 두 가지 조건을 비교하여 문제를 해결할 수 있다. 패키지로 구매하는 경우와 낱개로 6 개씩 구매하는 경우를 비교한다. 패키지로 구매하는 경우와 $N$.. 2023. 12. 26.