알고리즘 1624

codewars: Build a pile of Cubes

문제링크입니다: http://www.codewars.com/kata/5592e3bd57b64d00f3000047/train/cpp /*n개의 큐브를 쌓는 것이 당신의 임무이다.제일 밑에 있는 큐브는 부피가 n^3이고 그 다음 큐브는 (n-1)^3,그 다음은 (n-2)^3 ... 그리고 제일 위에 있는 큐브는 1^3이다.총 부피 m을 매개변수로 받고 n이 존재한다면 n을 반환하고그렇지 않다면 -1을 반환하시오*/#include using namespace std; class ASum{public: static long long findNb(long long m);}; long long cube(long long n) //3제곱{ int multiply = n; for (int i = 0; i < 2; i+..

codewars: Fibonacci, Tribonacci and friends

문제 링크입니다: https://www.codewars.com/kata/556e0fccc392c527f20000c5/train/cpp피보나치 수열의 원리만 안다면 쉽게 풀 수 있습니다. /*피보나치 수열은 F(n)=F(n-1)+F(n-2) 이런식으로 구한다.조금 더 확장해보자.Quadribonacci는 F(n)=F(n-1)+F(n-2)+F(n-3)+F(n-4)이다.그렇다면 Xbonacci는 F(n)=F(n-1)+...+F(n-x)이다.Xbonacci를 구하는 프로그램을 작성하시오*/#include #include using namespace std; std::vector xbonacci(std::vector signature, int n){ int length = signature.size(); if (..

algospot NUMB3RS

문제 링크입니다: 물론 완전탐색 알고리즘을 사용한다면 쉽게 풀 문제이지만 동적 계획법을 사용하여 문제를 푸는 것이 실력 향상에는 도움이 될 것 같습니다.여기서 중요한 포인트는 감옥에서 나온 날부터 시작하는 것이 아니라 찾고자 하는 마을, 즉 day일부터 거꾸로 답을 구하는 형식이라는 것입니다! /*위험한 살인마 두니발 박사가 감옥에서 탈출했다.그는 다음과 같은 조건으로 도주를 한다.1. 두니발 박사는 검문을 피해 산길로만 이동2. 두니발 박사는 교도소를 탈출한 당일, 교도소와 인접한 마을 하나로 도망쳐 은신한다3. 두니발 박사는 수색을 피하기 위해 매일 인접한 마을로 움직여 은신한다. 마을의 수, 탈출 후 지금까지 지난 일 수, 교도소가 있는 마을번호를 입력하고마을 그래프를 입력한다.(2차원 행렬에 인접..

codewars: Consecutive strings

문제 링크입니다:http://www.codewars.com/kata/56a5d994ac971f1ac500003e/train/cpp /*string 배열과 int형 변수 k가 주어졌다.배열의 요소(문자열)를 k번 연속으로 이어붙였을 때 제일 긴 문자열을 반환하시오*/#include #include #include using namespace std; //using namespace std를 작성했지만 codewars 컴파일러에서는 std::를 붙이게끔 했기 때문에 std::를 붙였다class LongestConsec{public: static std::string longestConsec(std::vector &strarr, int k);}; std::string LongestConsec::longestC..

codewars: A Rule of Divisibility by 13

문제 링크입니다: https://www.codewars.com/kata/564057bc348c7200bd0000ff/train/cpp재귀를 이용하면 상당히 쉽게 풀 수 있는 문제입니다. /*배열이 다음과 같이 주어졌다고 하자 {1, 2, 3, 4, 3, 2, 1};3번째 index를 기준으로 왼쪽과 오른쪽의 합이 6으로 같기 때문에당신의 함수는 3을 반환해야한다.다른 예시로는 {1, 100, 50, -51, 1, 1};이 있다.1번째 index를 기준으로 왼쪽과 오른쪽의 합이 1로 같기 때문에당신의 함수는 1을 반환해야한다.*/#include #include using namespace std; //배열이 정렬이 되어있다면 binary search로 풀었겠지만//정렬을 할 수 없기 떄문에 무식하게 풀었다..

codewars: Equal Sides Of An Array

문제 링크입니다: https://www.codewars.com/kata/5679aa472b8f57fb8c000047/train/cpp /*배열이 다음과 같이 주어졌다고 하자 {1, 2, 3, 4, 3, 2, 1};3번째 index를 기준으로 왼쪽과 오른쪽의 합이 6으로 같기 때문에당신의 함수는 3을 반환해야한다.다른 예시로는 {1, 100, 50, -51, 1, 1};이 있다.1번째 index를 기준으로 왼쪽과 오른쪽의 합이 1로 같기 때문에당신의 함수는 1을 반환해야한다.*/#include #include using namespace std; //배열이 정렬이 되어있다면 binary search로 풀었겠지만//정렬을 할 수 없기 떄문에 무식하게 풀었다.int find_even_index(const ve..

algospot POLY

문제링크입니다: https://algospot.com/judge/problem/read/POLY솔직히 손도 대지 못한 문제였습니다.'폴리오미노'라는 개념을 처음 알았고 '세로로 단조'라는 표현도 처음 알았기 때문입니다.책의 풀이는 정말 끝내줍니다. 최근 푼 문제들처럼 동적 계획법을 사용하여 푸는데 첫번째 줄에 몇개의 블록을 사용할 것인지를 토대로 답을 구해내는 풀이였습니다.풀이를 보면서 '아직 갈 길이 멀구나'라는 생각이 들면서도 흥미로워하는 것을 보면 프로그래밍이 적성에 맞는 편인 것 같습니다! /*정사각형들의 변들을 서로 완전하게 붙여 만든 도형들을 폴리오미노라고 한다n개의 정사각형으로 구성된 폴리오미노들을 만들려고 하는데, 이 중 세로로 단조인 폴리오미노의 수가 몇개나 되는가? 세로로 단조라는 말은..

백준 2133번 타일 채우기

문제 링크입니다: https://www.acmicpc.net/problem/2133타일링 문제가 상당히 흥미로웠기 때문에 백준 알고리즘 문제를 한번 풀어봤습니다.알고스팟에서 익혔던 방법대로 풀었더니 쉽게 풀렸습니다! (http://jaimemin.tistory.com/323?category=985009)주석으로 설명도 작성하였으니 이해가 쉽게 될 것이라고 생각합니다. /*3*N 크기의 벽을 2*1, 1*2 크기의 타일로 채우는 경우의 수를 구하시오*/#include #include //memsetusing namespace std; int cache[31]; //최대 30 //이 문제는 그림을 그렸을 때 잘 풀린다(아래와 같은 형태로 풀면 쉽게 풀린다)//■■는 1*2, ㅁ는 2*1 직사각형// ㅁ/*3..

알고리즘/BOJ 2018.01.28

algospot ASYMTILING

문제 링크입니다: https://algospot.com/judge/problem/read/ASYMTILING기존에 타일링 문제를 풀어봤으면 비교적 쉽게 풀 수 있을 것 같습니다. /*TILING2와 같이 2*n 크기의 직사각형을2*1 크기의 타일로 채우려고 한다.하지만 이 때 대칭을 이루지 않는 경우의 수만 구하시오*/#include #include //memsetusing namespace std; const int MOD = 1000000007; //32bit로 표현할 수 있는 수 넘었을 경우 대비int cache[101];//int cache2[101]; //직접세는 경우 고려//2*width 크기의 사각형을 채우는 방법의 수를 MOD로 나눈 나머지 반환int tiling(int width){ //..

codewars: Playing with digits

문제 링크입니다: http://www.codewars.com/kata/playing-with-digits알고리즘 강의를 찾다가 알고리즘 문제가 모아져있는 www.codewars.com를 알게 되었습니다.현재로써는 알고스팟에 집중하고 있지만 간간히 codewars도 방문해서 문제를 풀 생각입니다. /*재밌는 특성을 갖는 숫자들이 있다.예를 들자면,89 --> 8¹ + 9² = 89 * 1695 --> 6² + 9³ + 5⁴= 1390 = 695 * 246288 --> 4³ + 6⁴+ 2⁵ + 8⁶ + 8⁷ = 2360688 = 46288 * 51 양의 정수 n(abcd...과 같은 형태 ex)1234)과 p가 주어졌을 때 (a ^ p + b ^ (p+1) + c ^(p+2) + d ^ (p+3) + .....