알고리즘/codewars 22

codewars: Fun with trees: is perfect

문제 링크입니다: http://www.codewars.com/kata/fun-with-trees-is-perfect/train/cpp 개인적으로 별로 안 좋아하는 코드입니다.TreeNode를 구조체로 잡고 이진트리 클래스를 만들었다면 훨씬 간편하고 보기 좋은 코드로 작성할 수 있었겠지만 문제에서 저렇게 정의한 클래스를 가지고 문제를 풀라고 하니 어쩔 수 없었습니다. /*2^높이 - 1의 인덱스까지 모두 채워져있는 이진트리를 완전이진트리라고 한다.isPerfect 함수를 작성하시오*/#include #include using namespace std; int pow(int height){ int result = 1; for (int i = 0; i < height; i++) result *= 2; retu..

codewars Validate Credit Card Number

문제 링크입니다:알고리즘 설명이 다 되어있기 때문에 그대로 코드만 작성해주면 됩니다. /*Lune 알고리즘은 신용카드의 번호가 맞는지 확인할 때 쓰인다.최대 16자리 숫자가 주어졌을 때 카드 번호가 맞으면 true 틀리면 false를 반환하시오 알고리즘은 다음과 같다:1.자릿수가 홀수이면 홀수번째 숫자들에 2를 곱한다 자릿수가 짝수이면 짝수번째 숫자들에 2를 곱한다.2.두배를 했을 때 해당 숫자가 9를 넘긴다면 각 자릿수끼리 더하거나 해당 숫자에서 9를 뺀다3.모든 자릿수의 숫자를 더한다.4.10으로 나누었을 때 나머지가 0이면 true, 그 외의 경우 false이다*/#include #include using namespace std; class Kata{public: static bool valida..

codewars: Playing on a chessboard

문제 링크입니다: http://www.codewars.com/kata/55ab4f980f2d576c070000f4/train/cpp직접 그려가면서 하면 정말 간단한 문제입니다. 이런식으로 규칙이 있기 때문입니다. /*8*8 체스보드에서 친구와 게임을 하고 있다.첫번째 열에는 1/2, 2/3, 3/4, 4/5, 5/6, 6/7, 7/8, 8/9두번째 열에는 1/3, 2/4, 3/5, 4/6, 5/7, 6/8, 7/9, 8/10세번재 열에는 1/4, 2/5, 3/6, 4/7, 5/8, 6/9, 7/10, 8/11마지막 열에는 1/9, 2/10, 3/11, 4/12, 5/13, 6/14, 7/15, 8/16 체스보드에 모든 숫자가 입력되었다면 게임 참가자들은 모두 동전을 던진다.앞면이 나오면 체스보드에 적혀있..

codewars: Tank Truck

문제 링크입니다: https://www.codewars.com/kata/tank-truck/train/cpp수학을 오랜만에 하려니 정말 막막했습니다.인터넷으로 공식을 모두 검색한 결과 풀 수 있었습니다!아래 그림은 부연설명용으로 편집한 그림입니다. /* 이웃집에 탱크 트럭을 모는 아저씨가 산다. 기름이 어느정도 남았는지 표시하는 등이 나가버려서 이웃집 아저씨는 남은 기름으로 배달이 가능한지 판별을 할 수 없는 상태이다. 그래서 트럭을 평평한 땅 위에 둔 다음에 탱크의 연료의 높이를 측정하였다. 운이 좋게도 탱크의 연료통은 완벽한 원기둥이다. 남은 연료의 높이는 h, 지름은 d, 그리고 총 부피는 vt이다. 남은 연료의 부피를 구하시오 */ #include #include using namespace st..

codewars: Statistics for an Athletic Association

문제 링크입니다: https://www.codewars.com/kata/statistics-for-an-athletic-association/train/cpp문제 해석하는데 걸린 시간 정말 오래 걸렸습니다.처음에 hh|mm|ss가 팀 당 3명씩 출전시켜서 hh, mm, ss 그룹끼리 평균을 내는 문제인 줄 알았다가 한참 지나고 나서야 시간/분/초 기록인 것을 깨달았습니다.또한 hh/mm/ss 중 하나라도 00이라면 NULL 포인터가 들어간다고 문제에 적혀있어서 예외처리하느라 코드가 상당히 지저분해졌습니다.개인적으로 마음에 드는 코드는 아니지만(이쁘지 않고 상당히 지저분합니다 ㅠ) 그래도 풀었다는 것에 의의를 두고 나중에 수정해보겠습니다! /*당신은 지역 스포츠팀의 "컴퓨터 전문가"이다.많은 팀의 육상선수..

codewars: Simple Encryption #1 - Alternating Split

문제 링크입니다: http://www.codewars.com/kata/57814d79a56c88e3e0000786/train/cpp문제 해석하는게 진짜 힘들었습니다. 2nd char을 계속 두번째 문자라고만 해석해서 처음에 접근을 완전 엉뚱하게 했습니다.every 2nd char이라고 하면 짝수번째 인덱스에 있는 문자라고 해석했어야했네요. /*문자열을 암호화하는 방법:짝수번째 문자들을 모두 이어붙인 뒤 뒤에 홀수번째 문자들을 모두 이어붙인다이 것을 n번 진행하시오! 또한 복호화하는 함수도 작성하시오*/#include #include using namespace std; std::string encrypt(std::string text, int n){ int length = text.length(); //..

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 (..

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로 풀었겠지만//정렬을 할 수 없기 떄문에 무식하게 풀었다..