전체 글 2411

백준 2579번 계단 오르기

문제 링크입니다: https://www.acmicpc.net/problem/2579프로그래밍 대회에서 배우는 알고리즘 문제해결전략에서 익힌대로 재귀함수를 이용하여 풀고 싶었지만 아직 부족해서 그런지 재귀함수를 사용하지 못했습니다. /*계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다계단 오르는 데는 다음과 같은 규칙이 있다.1.계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.2.연속된 세 개의 계단을 모두 밟아서는 안된다. 단, 시작점은 계단에 포함되지 않는다.3.마지막 도착 계단은 반드시 밟아야 한다. 도착 후 최대값을 반환하는 프로그램을 작성하시오*/#include #in..

알고리즘/BOJ 2018.02.02

백준 1932번 숫자삼각형

문제 링크입니다: https://www.acmicpc.net/problem/1932동적계획법을 사용하면 쉽게 풀 수 있는 문제입니다. /*숫자로 이루어진 삼각형에서 맨 위층부터 시작해 아래에 있는 수 중하나를 선택하며 아래층으로 내려올 때, 최대합을 반환하시오*/#include #include #include //memsetusing namespace std; int triangle[501][501]; //삼각형int cache[501][501];int N; int maxSum(int stage, int idx) //층과 인덱스{ int &result = cache[stage][idx]; if (result != -1) return result; if (stage == N - 1) //맨 아랫줄 retu..

알고리즘/BOJ 2018.02.02

algospot KLIS

문제 링크입니다:https://algospot.com/judge/problem/read/KLIS기존에 LIS(http://jaimemin.tistory.com/317?category=985009) 문제를 풀어봤기 때문에 난이도 상 문제를 비교적 쉽게 이해할 수 있었습니다.이 문제에서의 핵심은 조건문 'LIS(start)=LIS(next)+1'과 (숫자, 숫자의 인덱스)를 pair를 이용하여 저장하는 것입니다.언제나 느끼지만 프로그래밍 대회에서 배우는 알고리즘 문제해결전략의 코드들은 예술입니다... /**/#include #include #include #include #include //memsetusing namespace std; const int MAX = 2000000000 + 1; //오버플로우..

슈퍼 마리오 오디세이 끝!

드디어 슈퍼마리오 오디세이를 완전히 끝냈습니다!모든 파워문, 퍼플코인, 캡쳐, 특산물과 bgm을 모았기 때문에 자연스럽게 젤다로 넘어가면 될 것 같습니다! 버섯 왕국 파워문 104개, 퍼플코인 100개 모자 왕국 파워문 31개, 퍼플코인 50개 폭포 왕국 파워문 40개, 퍼플코인 50개 모래 왕국 파워문 89개, 퍼플코인 100개 파워문 42개, 퍼플코인 50개 숲 왕국 파워문 76개, 퍼플코인 100개 눈 왕국 파워문 55개, 퍼플코인 50개 도시 왕국 파워문 81개, 퍼플코인 100개 구름 왕국 파워문 9개 빼앗긴 왕국 파워문 10개 잃어버린 왕국 파워문 35개, 퍼플코인 50개 바다 왕국 파워문 71개, 퍼플코인 100개 요리 왕국 파워문 68개, 퍼플코인 100개 쿠파 왕국 파워문 62개, 퍼플코..

백준 1149번 RGB거리

문제 링크입니다: https://www.acmicpc.net/problem/1149동적계획법이 부족하다고 느껴져 백준 알고리즘 사이트의 동적계획법 기초라는 항목 내에 있는 문제를 풀었습니다. /*모든 이웃은 같은 색을 칠할 수 없는 규칙이 적용된 거리가 있다각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠할 때 드는 비용의 최솟값을 구하는 프로그램을 작성하시오.*/#include #include using namespace std; int N;int cache[3] = { 0 }; //i-1번째 집을 칠하는 비용 int minCost(void){ int RGB[3]; int red, green, blue; cin >> red >> gre..

알고리즘/BOJ 2018.02.01

백준 1003번 피보나치 함수(DP 사용)

문제 링크입니다:https://www.acmicpc.net/problem/1003algospot에서 동적계획법 문제를 풀다보니 아직 미흡한 것 같아서 백준 온라인 저지에서 동적계획법 기초 문제를 풀어봤습니다. 물론 동적계획법을 사용하지 않아도 되는 문제이지만 동적계획법을 연습하고자 메모이제이션을 사용하였습니다. /*N이 주어졌을 때, fibonacci(N)을 호출할 경우 0과 1이 각각 몇번 출력되는가?*/#include #include //memsetusing namespace std; int N; //주어진 숫자int save = 2; //이미 구한 수는 다시 구하지 않는다int cache[2][41]; //메모이제이션 void fibonacci(int n){ if (N >= save) { for (..

알고리즘/BOJ 2018.02.01

algospot MORSE

문제 링크입니다:https://algospot.com/judge/problem/read/MORSE확실히 난이도:상과 난이도:중은 차이가 있는 것 같습니다.이 문제는 오버플로를 막기 위해 최대치를 미리 선정해둔 것과 다이나믹 프로그래밍을 사용하지 않는 풀이가 인상적이였습니다. #include #include #include #include //memsetusing namespace std; //모든 모스 신호를 만드는 완전 탐색 알고리즘/*//signal: 지금까지 만든 신호//con: 더 필요한 - 개수//pro: 더 필요한 o의 개수void generate(int con, int pro, string s){ if (con == 0 && pro == 0) { cout 0) generate(con, pro..

동물의 숲 포켓캠프 2/1 업데이트 내용

2018년 2월 1일 오후에 업데이트된 내용을 전해드리겠습니다.Lottie의 으스스한 장미 페스티벌이 진행되고 있습니다!당신의 정원에 박쥐가 있는 것 같습니다!Lottie가 멋진 박쥐들을 찾기 위해 당신의 캠핑장을 방문했습니다.gothic 장미들을 심고 물을 준 다음 박쥐를 잡으면서 그녀를 도울 수 있습니다. Lottie의 의뢰를 수행하면 멋진 보상이 따를 것입니다. 퀘스트 진행에 도움을 주기 위해 현재 두가지 장미 씨앗을 판매하고 있습니다.(현금)장미 씨앗을 구매한다면 비료는 덤으로 줍니다!더 자세한 정보를 얻고 싶다면 공지사항을 클릭하고 Gothic Rose Packs Now Available!을 클릭하세요. 이벤트 기간:2018년 2월 1일 15시부터 2018년 2월 10일 14:59분까지*해당 이..

카테고리 없음 2018.02.01

algospot OCR

문제 링크입니다:https://algospot.com/judge/problem/read/OCR여태까지 봤던 문제들 중에서 개인적으로 제일 어려운 문제라고 생각합니다.Viterbi algorithm(비터비 알고리즘)을 이용하여 푸는 문제인데 문제해설을 세번이나 정독했는데도 아직 부족하다는 느낌이 듭니다.다음 문제를 풀기 전에 Viterbi algorithm을 충분히 익혀야겠습니다... /* OCR은 사람이 쓰거나 기계로 인쇄한 글자를 스캔한 이미지를 다시 기계가 읽을 수 있는 문자로 변환하는 과정이다. 과거에 인식했던 수많은 문장들을 분석해 원본 문장의 형태를 파악하려고 한다 //중략 어떤 문장을 단어별로 인식한 결과가 주어졌을 때, 원본일 조건부확률이 가장 높은 ㅁ누장을 찾아내는 프로그램을 작성하시오 *..

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