본문 바로가기

Study16

[9461] 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오. 입력 : 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. (1 ≤ N ≤ 100) 출력 : 각 테스트 케이스마다 P(N)을 출력한다. 5번째까지 규칙성이 없다보니까 문제의 .. 2020. 5. 7.
[11726] 2 x n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. 입력 : 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000) 출력 : 첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다. 타일을 채워나갈 수 있는 방법은 두 가지가 있다. 1. 세로로 길게 채우는 방법 2. 가로로 눕혀서 두 개를 채우는 방법 세로 길이는 항상 2 크기를 지니고 있기 때문에 가로의 경우만 보겠다. 먼저 첫 번째 방법 처럼 세로로 길게 채우는 방법을 보면, 세로로 길게 세워서 채우는 경우에는 2x1 크기로 가로의 길이가 1만큼만 늘어난다. 반면 두 번째 방법의 경우에는, 가로로 두.. 2020. 5. 6.
다이나믹 프로그래밍(Dynamic Programming) 다이나믹 프로그래밍은 "한 번 푼 걸 다시 풀어야 하는 문제의 경우 효율적으로 풀 수 있게끔 하는 알고리즘"이다. 문제를 비효율적으로 반복해서 풀다보면, 프로그램 속도가 느려지기도 하고, 말 그대로 정말 비효율적인 코딩이 된다. 대표적인 예시를 들어보자면, 피보나치 수열이 있다. 피보나치 수열은 앞의 두 숫자를 더해서 수가 나열되는 규칙을 지니고 있다. 이 것을 점화식으로 표현하자면, 이렇게 간단하게 표현할 수 있다. 문제를 이런 식으로 풀다보면, 계속해서 구했던 값인데도 불구하고 비효율적으로 계속해서 다시 구해야되는 일이 발생한다. 5라는 숫자를 넣어서 예를 들자면, 5는 굉장히 작은 축에 속하는 숫자임에도 불구하고, 2를 3번이나 다시 계산해야된다. 더 큰 숫자의 경우에는 더 비효율적이다. 이럴 때에.. 2020. 5. 1.
Stack, queue(스택, 큐) 스택(Stack)과 큐(Queue)는 자료구조의 한 형태이다. 스택(Stack)과 큐(Queue)에 대해 설명하기 앞서 연결리스트(Linked List)도 자료구조의 형태 중 하나인데 이것에 대해 간단히 얘기를 하자면, 정해진 원소 크기가 없는 리스트로 시스템에 추가되는 원소가 동적이거나 메모리 원소가 불연속적인 원소들을 효율적으로 관리해 줄 수 있는 것이다. 스택(Stack)과 큐(Queue)도 연결리스트(Linked List)와 굉장히 유사한데, 먼저 큰 차이에 대해 얘기하자면 스택(Stack)은 LIFO(Last In First Out), 큐(Queue)는 FIFO(First In First Out) 형태를 가지고 있다. 연결리스트 같은 경우에는 일련의 원소들 사이에 원소 끼워넣기가 가능하지만, 스.. 2020. 4. 17.