[프로그래머스] 숫자 카드 나누기
문제 철수와 영희는 선생님으로부터 숫자가 하나씩 적힌 카드들을 절반씩 나눠서 가진 후, 다음 두 조건 중 하나를 만족하는 가장 큰 양의 정수 a의 값을 구하려고 합니다. 철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a 영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a 예를 들어, 카드들에 10, 5, 20, 17이 적혀 있는 경우에 대해 생각해 봅시다. 만약, 철수가 [10, 17]이 적힌 카드를 갖고, 영희가 [5, 20]이 적힌 카드를 갖는다면 두 조건 중 하나를 만족하는 양의 정수 a는 존재하지 않습니다. 하지만, 철수가 [10, 2..
2022.11.16
[프로그래머스] 과일 장수
문제 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다. 한 상자에 사과를 m개씩 담아 포장합니다. 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다. 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다) 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을..
2022.11.16
[구름] 모래성
문제 바닷가에 놀러 간 구름이는 모래사장에서 모래 섬을 만들었다. 구르미는 자신이 만든 모래 섬에 다리를 세우고 싶어한다. 다리를 그냥 만들 수 있지만, 다리는 섬과 섬을 이어줄 때 그 의미가 있다고 생각을 했다. 구르미는 섬을 만들기 위해서 모래사장에 물을 붇기로 한다. 모래 섬은 주변에 물이 있으면 무너져 내린다. 현재 모래사장은 세로의 길이가 n, 가로의 길이가 m 크기이다. 모래사장을 1*1크기로 나누었을 때, 가장 왼쪽 위부터 i번째 줄의 j번째 칸을 arr[i][j]라고 표현할 수 있다. arr[i][j]의 값이 0이라면 이미 물에 가라앉았다는 의미이다. arr[i][j]이 양의 정수라면, 현재 위치의 모래의 고도이다. 모래는 주변의 물의 양에 따라서 매분마다 무너져 내린다. arr[i][j]..
2022.11.15
[구름 알고리즘 먼데이 챌린지] Week6 : 4. 경쟁 배타의 원리
문제 경쟁 배타의 원리란 생태학의 원리 중 하나로, 같은 영역에서 같은 생태적 지위를 차지하는 두 종은 분서를 제외하고는 공존할 수 없다는 것이다. 쉽게 말해서, 둘 이상의 종이 존재한다면 서로 경쟁하여 생존에 유리한 하나의 종만이 살아남는다. 하지만 구름이가 설계한 메타버스의 경쟁 배타의 원리는 이와 조금 다른데, 둘 이상의 종이 아닌 정확히 K개의 종이 공존할 때만 경쟁이 일어난다. 종의 수가 K보다 작거나 많다면 경쟁이 일어나지 않고 공생하며 살아간다. 구름이의 메타버스는 가로 세로 크기가 1,000인 정사각형 모양이다. 현재 구름이의 메타버스에는 생태적 지위가 같은 N종의 생물이 있고, 각 종의 서식지는 메타버스의 테두리에 평행한 직사각형 모양으로 나타내어진다. 메타버스의 생태계 지도가 주어졌을 ..
2022.11.14
[구름 알고리즘 먼데이 챌린지] Week6 : 3. 비밀 편지
문제 구름이는 친구에게 전달할 편지의 내용을 숨기기 위해서 새로운 암호 방법을 고안했다. 암호는 문자열과 암호/복호화를 위한 토큰으로 이루어져 있다. 토큰 앞에 붙는 E 혹은 D표시를 통해서 암호화 혹은 복호화를 진행해야 한다. 구름이가 만든 암호화 과정은 다음과 같다. ●토큰을 문자열과 같은 길이로 맞춘다. 만약에 토큰의 길이가 문자열보다 작다면, 토큰을 반복하여 늘릴 수 있다. ●문자열의 값이 알파벳 대소문자인 경우 토큰의 ASCII 코드 값만큼 shift한다. shift는 알파벳의 다음 글자로 바뀌는 연산을 의미하며 'Z' 혹은 'z'인 경우 'A' 혹은 'a'로 바뀐다. ●ASCII 코드에서 'A'~'Z'는 65~90, 'a'~'z'는 97~122이며 '0'~'9'는 48~57이다. 복호화는 암호..
2022.11.14
[구름 알고리즘 먼데이 챌린지] Week6 : 2. 제곱암호
문제 구름이는 비밀스러운 이야기를 전달하기 위해서 새로운 암호 체계인 제곱암호를 고안했다. 제곱암호로 암호화된 문장은 다음과 같은 특징을 가진다. ●암호문의 길이가 N이라면, N/2개의 숫자와 N/2개의 알파벳 소문자로 이루어져 있다. 암호문의 길이는 항상 짝수이다. ●암호문의 첫 글자는 항상 알파벳 소문자이며, 이후에는 항상 숫자와 알파벳 소문자가 번갈아 가며 등장한다. 제곱암호로 암호화된 문장은 아래 방식을 통해 복호화할 수 있다. ●원문은 N/2의 길이를 가지고 있으며, 모두 알파벳 소문자이다. ●암호문의 첫 번째 문자부터 순서대로 아래의 복호화 과정을 거친다. 첫 번째 문자는 문장의 가장 왼쪽 문자를 의미한다. ●i가 홀수일 때, 암호문의 i번째 문자를 알파벳의 사전 기준 다음 문자로 바꾸는 작업..
2022.11.14
no image
[구름 알고리즘 먼데이 챌린지] Week6 : 1. 7게임
입력받은 문자열을 문제 조건에 맞게 처리해 주어 간단하게 해결할 수 있었다. 1.입력 받은 7자리 정수 K의 홀수 번째 숫자들을 합한 a를 생성 2.a에 K의 0이 아닌 짝수 번째 숫자들을 곱하기 3.a(mod10) 출력 #include using namespace std; int a; string input; void sum_add() for (int i = 0; i < 7; i += 2) a += input[i] - '0'; } void multi_even() { for (int i = 1; i < 6; i += 2) { if (input[i] == '0') continue; a *= input[i] - '0'; } } int main() { ios::sync_with_stdio(0); cin.tie..
2022.11.14
no image
[구름 알고리즘 먼데이 챌린지] Week5 : 3. 수 이어 붙이기
완탐문제라고 생각했고 재귀호출과 백트래킹을 적절히 사용하여 가능한 경우를 모두 구해주어 최소 값을 갱신해 주도록 하였다. 한 가지 함정에 주의하자! 문제에서 겹쳐서 이어 붙일 수 있는 경우에도 그냥 이어 붙있 수 있다고 하지만 조금만 생각해 보면 최소 값을 위해서는 가능한 경우 항상 겹쳐서 이어 붙이는 것이 합리적이라는 것을 알 수 있다. #include #include #include using namespace std; int n; long long ans = 9999999999999999, num; vector numbers(9, 0), visited(9, 0); void dfs(int cnt, string number) { if (cnt == n) { num = stoll(number); if (..
2022.11.12
no image
[구름 알고리즘 먼데이 챌린지] Week5 : 2. 모래섬
문제 바닷가에 놀러 간 구름이는 모래사장에서 모래를 쌓아서 모래섬을 만들었다. 구름이는 자신이 만든 모래섬 사이에 다리를 세우고 싶어한다. 다리를 그냥 만들 수도 있지만, 구름이는 서로 떨어진 섬과 섬을 이어줄 때 다리가 의미가 있다고 생각을 했다. 그래서 구름이는 모래사장에 물을 부어서 모래섬을 여러 개의 섬으로 나누고자 한다. 모래사장은 세로의 길이가 N, 가로의 길이가 M인 직사각형 모양의 땅이다. 모래사장을 1*1 크기로 나누었을 때, 가장 왼쪽 위부터 i번째 줄의 j번째 칸의 상태를 arr[i][j]라고 표현할 수 있다. 각 칸의 상태는 0또는 1중 하나이다. ●arr[i][j]의 값이 0이라면, 그 칸은 물에 가라앉은 칸임을 의미한다. ●arr[i][j]의 값이 1이라면, 그 칸은 모래가 쌓여..
2022.11.12