본문 바로가기

728x90

수열

[백준알고리즘] 1024번: 수열의 합 -C++ [백준알고리즘] 1024번: 수열의 합 -C++ 1024번: 수열의 합 (acmicpc.net) 1024번: 수열의 합 첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다. www.acmicpc.net 10억 이하의 자연수 N과 100 이하의 자연수 L이 주어졌을 때, 수열의 합이 N이면서 길이가 100 이하인 수열을 찾는 문제다. 이번 문제의 경우 쉽게 접근할 수 있었으나, 예상치 못한 곳에서 오버플로우가 발생해서 골치아팠다. 잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다 문제에 대한 접근법은 실제 여러 수를 직접 해보면서 알아냈다. 먼저, 홀수는 \(l = 2\)로 모두 찾아지기 때문에 이 경우를.. 더보기
[백준알고리즘] 2331번: 반복수열 -Python [백준알고리즘] 2331번: 반복수열 -Python https://www.acmicpc.net/problem/2331 2331번: 반복수열 첫째 줄에 반복되는 부분을 제외했을 때, 수열에 남게 되는 수들의 개수를 출력한다. www.acmicpc.net 처음 짠 코드와 다른 분들의 코드를 보고 수정한 코드를 다 가져왔다. 다른 분들의 코드를 보니 딱히 도움이 되지 않는 작업들을 한 것 같다. 우선은 참고했던 반례는 아래와 같다. in: 153 3 out: 0 in: 58 2 out: 0 in: 9999 5 out: 3 처음에 짰을 때에는 순열의 다음 값을 가리키기 위해서 리스트 link에 다음 값에 대한 정보를 추가했었다. 그리고 link에 포함되었던 값이 나오게 되면 사이클이 형성된 것이기 때문에 중복된.. 더보기
[백준알고리즘] 9461번: 파도반 수열 -Python [백준알고리즘] 9461번: 파도반 수열 -Python https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. N이 주어졌을 때, P(N)을 구하 www.acmicpc.net 초기에 5번째 삼각형까지는 길이를 직접 넣어주었다. 그리고 그림에서의 규칙을 .. 더보기
[백준알고리즘] 11722번: 가장 긴 감소하는 부분 수열 -Python [백준알고리즘] 11722번: 가장 긴 감소하는 부분 수열 -Python https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} 이고, 길이는 3이다. www.acmicpc.net 가장 긴 증가하는 부분 수열만 하더라도 정답 비율이 낮은 편은 아니더라도 유사한 문제를 계속 출제해서 그런 건지 정답 비율이 매우 높다. 이 문제도 마찬가지로 풀면 된다. 거의 풀었던 방식과 비슷하게 풀었다. 똑같이 max를 이.. 더보기
[백준알고리즘] 11055번: 가장 큰 증가 부분 수열 -Python [백준알고리즘] 11055번: 가장 큰 증가 부분 수열 -Python https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수열은 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 이고, 합은 113이다. www.acmicpc.net 이전 문제인 "가장 긴 증가하는 부분 수열" 문제와 유사하다. 이번 문제는 길이가 아니라 부분 수열의 원소들의 합을 구하는 문제라는 차이가 있다. 따라서 이전 문제에서는 길.. 더보기
[백준알고리즘] 11053번: 가장 긴 증가하는 부분 수열 -Python [백준알고리즘] 11053번: 가장 긴 증가하는 부분 수열 -Python https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. www.acmicpc.net 부분 수열 중 증가수열로 가장 길게 만들 수 있는 길이를 구하는 문제이다. 이 문제를 해결하고 다른 사람들의 코드를 봤는데 나는 내 코드가 가장 간단한 것 같다. 우선 초기 리스트를 1~1000까지 잡아주기 위해서 1001만큼의.. 더보기
[백준알고리즘] 1874번: 스택 수열 -Java [백준알고리즘] 1874번: 스택 수열 -Java https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 처음에 문제를 이해하는 데 이상했었다. 문제를 설명하자면 1부터 n까지의 수를 차례대로 stack에 push 하거나 pop 해서 주어진 수열을 만들 수 있는가를 물어보는 문제이다. 이에 대해서 문제를 풀기 위해서는 stack에 push할 때의 조건과 pop 시킬 때의.. 더보기

728x90