본문 바로가기

C++ 코딩 문제 풀이151

[Programmers] 호텔 대실 https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 시간대를 인덱스로 표현하고 해당 시간에 필요한 방의 수를 요소로 표현하는 배열을 선언하여, 각각의 대실 시간에 대하여 시작 시간부터 종료 시간 + 10분 이전까지 필요한 방의 수를 증가시킨다. 위의 반복 과정이 끝난 다음, 해당 배열에서 가장 큰 값을 출력하여 문제를 해결한다. 구현 [스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~ 더보기 #include #.. 2023. 9. 7.
[Programmers] 연속 펄스 부분 수열의 합 https://school.programmers.co.kr/learn/courses/30/lessons/161988 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 동적계획법(dynamic programming)을 통해 부분 수열의 합을 구하는 알고리즘을 응용하여 펄스 부분 수열의 합을 구한다. 구현 이전 포스트에서 사용한 방법을 동일하게 적용하되, 원래 수열에 곱할 수 있는 펄스 수열은 1 또는 -1로 시작하는 두 가지의 경우가 있으므로, 원래 수열에 1과 -1로 시작하는 각각의 펄스 수열을 길이만큼 곱한 수열에 대해 부분 수열의 합.. 2023. 9. 7.
[Programmers] 멀리 뛰기 https://school.programmers.co.kr/learn/courses/30/lessons/12914 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 한 번에 뛸 수 있는 칸의 수가 1 또는 2이므로, $n$ 번째 칸에 도달하기 위해서는 $(n-2)$ 번째 칸에서 2 칸을 뛰거나 $(n-1)$ 번째 칸에서 1 칸을 뛰어야한다. 따라서 $n$ 번째 칸에 도달하기 위한 경우의 수를 $f(n)$이라고 하면 $f(n)$은 아래와 같은 점화식(recursive formula)을 만족하며 처음 두 개의 항을 1, 2로 하는 피보나치 .. 2023. 8. 30.
[Programmers] 예상 대진표 https://school.programmers.co.kr/learn/courses/30/lessons/12985 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 아래와 같은 규칙을 반복적으로 적용하여 대진 라운드를 계산할 수 있다. $N$ 명의 참가자에 대하여, 번호 순으로 $N / 2$ 명씩 그룹을 지었을 때, A와 B가 서로 다른 그룹에 있는 경우: A와 B가 각각 반드시 승리해서 다음 라운드로 진출해야하므로, A의 번호 및 B의 번호에 1을 더한 뒤 2로 나눈 값으로 갱신하고, 라운드 수를 증가시킨다. A와 B가 서로 같은 그룹.. 2023. 8. 28.
[Programmers] N개의 최소공배수 https://school.programmers.co.kr/learn/courses/30/lessons/12953 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 일반적으로 프로그래밍을 통해 최소공배수(least common multiplier, LCM)를 구하기 위해 사용하는 알고리즘은 두 개의 숫자에 대한 최소공배수를 구하는 알고리즘이다. 2 개 이상의 숫자들에 대한 최소공배수는 아래와 같이 pairwise 연산을 통해서 구할 수 있음을 이용하고자 하였다. $$LCM(a, b, c) = LCM( LCM( a, b ), c )$$ 한.. 2023. 8. 27.
[Programmers] 올바른 괄호 https://school.programmers.co.kr/learn/courses/30/lessons/12909 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해결 과정 착안 스택(stack) 자료 구조의 원리에 따라 '(' 문자가 들어오는 수 만큼 문자를 카운팅하고, ')' 문자가 들어오는 수 만큼 카운팅한 횟수를 다시 낮추는 방식을 활용하고자 하였다. 구현 함수를 실행하여 괄호 문자를 카운팅을 하는 동안 아래와 같은 경우는 문제에서 요구하는 올바른 괄호가 아니다. 문자열을 따라 첫 문자부터 마지막 문자까지 카운팅을 완료하고 난 뒤의 카운트가 0.. 2023. 8. 27.