본문 바로가기

Problem Solving/SWEA147

[SWEA] 5688. 세제곱근을 찾아라 문제 양의 정수 N에 대해 N = X^3가 되는 양의 정수X 를 구하여라. 풀이방법 n이 입력되었을 때, x = 1부터 x 2020. 2. 29.
[SWEA] 8840. 아바바바 문제 ‘a’와 ‘b’가 번갈아 나오는 길이 L인 문자열이 있다. L = 5이면 “ababa”이고, L = 7이면 “abababa”이다. 홀수 L이 주어질 때, ‘a’와 ‘b’가 번갈아 나오는 길이 L인 문자열에서, 길이가 2이상인 연속한 부분문자열이 회문(앞으로 읽어도 뒤로 읽어도 같은 문자열)인 것의 개수를 구하는 프로그램을 작성하라. 풀이방법 L이 최대 10^9까지 입력되므로 반복문을 사용할 경우 시간초과가 발생한다. 따라서 L이 입력되었을 때, 출력값을 바로 계산할 수 있는 규칙을 찾아야한다. L=3이면 "aba"이고, 회문은 "aba" 하나를 만들 수 있다. L=5이면 "ababa"이고, 회문은 "aba", "bab", "aba", "ababa" 3개를 만들 수 있다. L=7이면 "abababa".. 2020. 2. 29.
[SWEA] 3408. 세가지 합 구하기 문제 N을 입력 받아 다음의 세 가지 합을 구하는 프로그램을 작성하라. S1 = 양의 정수 중에서 작은 순서대로 N개의 합. S2 = 양의 정수 중 홀수인 것들 중에서 작은 순서대로 N개의 합. S3= 양의 정수 중 짝수인 것들 중에서 작은 순서대로 N개의 합. 예를 들어 N = 5의 입력이 들어왔을 경우, S1 = 1 + 2 + 3 + 4 + 5, S2 = 1 + 3 + 5 + 7 + 9, S3 = 2 + 4 + 6 + 8 + 10 이다. 풀이방법 n이 최대 10^9까지 입력되므로 반복문을 사용할 경우 시간초과가 발생한다. 따라서 n이 입력되었을 때, 출력값을 바로 계산할 수 있는 규칙을 찾아야한다. n이 주어졌을 때, S1, S2, S3 각각은 아래와 같은 규칙을 가지고 있다. n개의 짝수의 합(S3.. 2020. 2. 29.
[SWEA] 7193. 승현이의 수학공부 문제 승현이는 N(2 ≤ N ≤ 10) 진법의 수 X(1 ≤ X ≤ N^10,000,000) 를 공책에 적었다. 승현이는 손이 점점 아프기 시작했고, 머릿속에서 문득 X를 (N-1)로 나눈 나머지가 궁금해졌다. 승현이를 도와 N진법의 수 X가 주어졌을 때에 X를 (N-1)로 나눈 나머지를 계산하는 프로그램을 작성하라. 예를 들면, 9진법의 수 234는 10진법으로 193이고, 8로 나눈 나머지는 1이 된다. 풀이방법 n진법으로 표현된 수를 (n-1)로 나누면 각 자리 수마다 자리 수의 값만큼 나머지가 생긴다. 즉 9진법으로 표현된 234를 8로 나누게 될 경우 9^2자리에는 나머지가 2, 9^1자리에는 나머지 1, 9^0자리에는 나머지가 4가 생긴다. 이러한 규칙을 이용해 n진법으로 표현된 수의 각 자리.. 2020. 2. 29.
[SWEA] 4579. 세상의 모든 팰린드롬 2 문제 어떤 단어를 뒤에서 앞으로 거꾸로 썼을 때 원래의 단어와 같으면 이를 팰린드롬이라고 한다. 예를 들어 “madam”은 뒤에서 앞으로 읽어도 “madam”이기 때문에 팰린드롬이다. 그러나 “dog”는 뒤에서 앞으로 읽으면 “god”이기 때문에 팰린드롬이 아니다. “doggod”은 뒤에서 앞으로 읽으면 “doggod”이므로 팰린드롬이다. 25XX년 의석이는 알파벳 소문자로 만든 단어들 중에서 팰린드롬인 것들을 모두 모아(그 단어에 뜻이 있건 없건) 데이터베이스에 넣었다. 요즘은 저장 장치가 발달해서 매우 많은 팰린드롬을 저장할 수 있기 때문에 모든 팰린드롬을 저장하지 못할 것이라는 걱정은 하지 않아도 좋다. 의석이는 이 데이터베이스에서 특정한 패턴에 매치되는 팰린드롬을 찾으려고 한다. 의석이는 알파벳 .. 2020. 2. 29.
[SWEA] 6781. 삼삼 트리플 게임 문제 삼삼 트리플(Samsam-Triple)은 여러 사람이 할 수 있는 게임이다. 이 게임에는 카드를 이용하는데, 카드에는 1에서 9까지의 숫자가 카드에 적혀 있고 적힌 숫자의 색이 빨강(R), 초록(G), 파랑(B)중의 하나로 총 27종류의 카드를 사용한다. 각 종류의 카드는 모두 4장씩 존재하여 총 108장의 카드로 게임을 진행한다. 이 게임에 참가하는 사람들은 9장의 카드를 패로 가져간다. 그리고, 차례를 번갈아 가면서 카드 한 장을 버린 다음 한 장을 새롭게 뽑아오는 것을 반복한다. 이렇게 순서대로 차례를 진행하다가 세 장의 카드로 이루어진 세트를 3개 만든 사람이 승리한다. 각 세트는 동일한 색의 카드 세 장으로 이루어져야 하며, 세 숫자가 모두 같거나, 세 숫자가 모두 연속된 숫자여야 한다. .. 2020. 2. 28.
[SWEA] 6057. 그래프의 삼각형 문제 정점이 N개, 간선이 M개 있는 그래프가 주어진다. 정점에는 1번에서 N번까지의 번호가 붙어 있다. 이 때, i번 정점과 j번 정점 사이에, j번 정점과 k번 정점 사이에, k번 정점과 i번 정점 사이에 모두 간선이 있는 ( i, j, k ) (단, i < j < k )를 삼각형이라고 하자. 삼각형의 개수를 구하는 프로그램을 작성하라. 풀이방법 DFS(깊이 우선 탐색) 알고리즘을 활용해 문제를 해결한다. 삼각형을 만드는 경우는 정점 3개가 cycle을 형성할 때 삼각형이 만들어진다. 정점 3개로 이루어진 사이클의 모든 개수를 다 찾는다. 예를 들어, 1번 정점부터 시작했을 때, 1번 정점에서 갈 수 있는 정점을 모두 방문한다. 현재 방문한 정점의 개수는 1이다(1번 정점 제외) 각 방문한 정점에서 .. 2020. 2. 28.
[SWEA] 4615. 재미있는 오셀로 게임 문제 오셀로라는 게임은 흑돌과 백돌을 가진 사람이 번갈아가며 보드에 돌을 놓아서 최종적으로 보드에 자신의 돌이 많은 사람이 이기는 게임이다. 보드는 4x4, 6x6, 8x8(가로, 세로 길이) 크기를 사용한다. 6x6 보드에서 게임을 할 때, 처음에 플레이어는 다음과 같이 돌을 놓고 시작한다(B : 흑돌, W : 백돌). 4x4, 8x8 보드에서도 동일하게 정가운데에 아래와 같이 배치하고 시작한다. 그리고 흑, 백이 번갈아가며 돌을 놓는다. 처음엔 흑부터 시작하는데 이 때 흑이 돌을 놓을 수 있는 곳은 다음과 같이 4군데이다. 플레이어는 빈공간에 돌을 놓을 수 있다. 단, 자신이 놓을 돌과 자신의 돌 사이에 상대편의 돌이 있을 경우에만 그 곳에 돌을 놓을 수 있고, 그 때의 상대편의 돌은 자신의 돌로 만.. 2020. 2. 28.
[SWEA] 8016. 홀수 피라미드 문제 경표는 아래와 같이 삼각형 모양으로 숫자를 쌓기로 했다. 1층에는 1개, 2층에는 3개, 3층에는 5개, … 와 같이 쌓는다. 위와 같이 경표는 끝도 없이 피라미드를 쌓을 때, N층의 제일 왼쪽, 오른쪽에 쓰게 될 숫자가 무엇일지 예측해보자. 풀이방법 처음에는 동적계획법(DP, Dynamic Programming) 알고리즘을 사용해 풀었으나 제출 시에 시간초과가 발생했다. 이유는 입력으로 n이 최대 10^9까지 입력되는데 이럴 경우 반복문은 1,000,000,000을 돌아야하므로 시간초과가 발생한다. 다른 방법으로 접근하면 왼쪽 가장자리의 수와 오른쪽 가장자리의 수들을 일정한 규칙을 가지는 수열로 생각하는 것이다. 왼쪽 가장자리 : 1, 3, 9, 19, .... 오른쪽 가장자리 : 1, 7, 17.. 2020. 2. 28.
[SWEA] 1491. 원재의 벽 꾸미기 문제 새 집으로 이사를 온 원재는 밋밋한 방을 꾸미기 위해 1 X 1타일 N개를 이용해 R X C 크기의 직사각형 인테리어를 하나 만들어 벽면을 꾸미려고 한다. 그런데, 원재의 방은 정사각형 형태이기 때문에 만드는 직사각형 인테리어를 최대한 정사각형에 가깝게 만들면서, 최대한 많은 타일을 사용하려고 한다. 두 조건을 모두 만족하기 어렵다고 판단한 원재는 이 두 조건에 대해 가중치 A, B를 가지고 나름의 식을 도출해냈다. A X lR – Cl + B X (N - R X C) 원재는 위의 값을 최소화하려고 한다. 최소화된 이 값을 출력하는 프로그램을 작성하라. 풀이방법 R X C 2020. 2. 28.
[SWEA] 3307. 최장 증가 부분 수열 문제 주어진 두 수열의 최장 증가 부분 수열(Longest Increasing Subsequence)의 길이를 계산하는 프로그램을 작성하시오. 수열 { A1, A2, ... , AN }의 최장 증가 부분 수열 B는 다음과 같이 정의된다. { B1, B2, ... , BK }에서 0≤K≤N, B1 ≤ B2 ≤ ... ≤ BK이고, AB1 ≤ AB2 ≤ ... ≤ ABK인 최대 K로 구성된 수열이다. 예를 들어, 수열이 { 1, 3, 2, 5, 4, 7 } 이라면, 최장 부분 증가 수열의 길이는 4가 된다. 풀이방법 동적 계획법(DP, Dynamic Programming)을 이용해서 해결할 수 있다. 입력된 수열의 길이와 같은 배열을 하나 선언하고 배열에 i번째 원소에는 수열의 i번째 원소까지의 최장길이가 .. 2020. 2. 27.
[SWEA] 4698. 테네스의 특별한 소수 문제 테네스는 소수를 좋아한다. 소수란 1과 자기 자신만으로 나뉘어 떨어지는 숫자로 작은 것부터 나열하면 2, 3, 5, 7, 11, 13, 17, 19, 23, …같은 수들이 있다. 또한 테네스는 D를 포함하는 숫자도 좋아한다. 그렇기에 소수가 D를 포함하면 더욱 더 좋아하여 특별한 소수라고 부르기로 했다. 예를 들어 D = 3이면 3, 13, 23, … 같은 소수들이 3을 포함하였으므로 테네스는 이런 숫자들을 특별한 소수라고 부를 것이다. D가 주어질 때, A이상 B이하의 수 중에서 특별한 소수인 것들의 개수를 구하는 프로그램을 작성하라. 풀이방법 D, A, B가 입력될 때마다 A부터 B까지의 소수를 구하면 시간초과가 발생한다. 따라서 1부터 B의 최대값 1000000까지 에라토스테네스의 체를 이용해.. 2020. 2. 27.