본문 바로가기
반응형

전체 글454

C++ 프로그래머스 Lv3 하노이의 탑 [C++] 프로그래머스 Lv3 하노이의 탑 문제 설명하노이 탑(Tower of Hanoi)은 퍼즐의 일종입니다. 세 개의 기둥과 이 기동에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있습니다. 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것입니다. 한 번에 하나의 원판만 옮길 수 있습니다. 큰 원판이 작은 원판 위에 있어서는 안됩니다. 하노이 탑의 세 개의 기둥을 왼쪽 부터 1번, 2번, 3번이라고 하겠습니다. 1번에는 n개의 원판이 있고 이 n개의 원판을 3번 원판으로 최소 횟수로 옮기려고 합니다. 1번 기둥에 있는 원판의 개수 n이 매개변수로.. 2023. 9. 16.
C++ 유용한 문법 [C++] 유용한 문법 castingto_string()문자열로stoi()  string to intstoll()string to long longstod()string to doublestof()string to floatstob()string to boolc_str()char*로 변환atoi()char* > intstring생성string str;빈 문자열 생성 string str = "abcdef";"abcdef" 문자열 string str("abcdef");"abcdef" 문자열 string str2(str)str을 복사한 str2문자열 char s[ ] = {'a', 'b', 'c', 'd', 'e', 'f'}; string str(s);char의 문자열과 호환 string *str = new .. 2023. 9. 16.
C++ 프로그래머스 Lv1 추억 점수 [C++] 프로그래머스 Lv1 추억 점수 문제 설명사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1.. 2023. 9. 15.
C++ 최대 값, 최소 값 (max_element, min_element) [C++] 최대 값, 최소 값 (max_element, min_element) 배열, 벡터, 리스트의 자료 중 최대, 최솟값을 찾기 위한 함수이다. 안에 있는 데이터의 순서가 의미있는 값일 때, 정렬하는 것에 문제가 있을 때 사용한다. max_element, min_element 함수를 사용하기 위해서는 algorithm 을 include 해야 한다. #include max_element, min_element 함수의 기본 형태는 다음과 같다.max_element(start, end)를 이용하면 [start, end) 범위 중에 가장 큰 값의 iterator를 반환한다.*max_element(start, end)를 이용하면 [start, end) 범위 중에 가장 큰 값의 value를 반환한다.min_el.. 2023. 9. 15.
C++ 프로그래머스 Lv3 연속 펄스 부분 수열의 합 [C++] 프로그래머스 Lv3 연속 펄스 부분 수열의 합 문제 설명어떤 수열의 연속 부분 수열에 같은 길이의 펄스 수열을 각 원소끼리 곱하여 연속 펄스 부분 수열을 만들려 합니다. 펄스 수열이란 [1, -1, 1, -1 …] 또는 [-1, 1, -1, 1 …] 과 같이 1 또는 -1로 시작하면서 1과 -1이 번갈아 나오는 수열입니다. 예를 들어 수열 [2, 3, -6, 1, 3, -1, 2, 4]의 연속 부분 수열 [3, -6, 1]에 펄스 수열 [1, -1, 1]을 곱하면 연속 펄스 부분수열은 [3, 6, 1]이 됩니다. 또 다른 예시로 연속 부분 수열 [3, -1, 2, 4]에 펄스 수열 [-1, 1, -1, 1]을 곱하면 연속 펄스 부분수열은 [-3, -1, -2, 4]이 됩니다. 정수 수열 seq.. 2023. 9. 15.
C++ 프로그래머스 Lv2 디펜스 게임 [C++] 프로그래머스 Lv2 디펜스 게임문제 설명준호는 요즘 디펜스 게임에 푹 빠져 있습니다. 디펜스 게임은 준호가 보유한 병사 n명으로 연속되는 적의 공격을 순서대로 막는 게임입니다. 디펜스 게임은 다음과 같은 규칙으로 진행됩니다. 준호는 처음에 병사 n명을 가지고 있습니다. 매 라운드마다 enemy[i]마리의 적이 등장합니다. 남은 병사 중 enemy[i]명 만큼 소모하여 enemy[i]마리의 적을 막을 수 있습니다. 예를 들어 남은 병사가 7명이고, 적의 수가 2마리인 경우, 현재 라운드를 막으면 7 - 2 = 5명의 병사가 남습니다. 남은 병사의 수보다 현재 라운드의 적의 수가 더 많으면 게임이 종료됩니다. 게임에는 무적권이라는 스킬이 있으며, 무적권을 사용하면 병사의 소모없이 한 라운드의 공격.. 2023. 9. 15.
C++ 프로그래머스 Lv2 요격 시스템 [C++] 프로그래머스 Lv2 요격 시스템 문제 설명A 나라가 B 나라를 침공하였습니다. B 나라의 대부분의 전략 자원은 아이기스 군사 기지에 집중되어 있기 때문에 A 나라는 B 나라의 아이기스 군사 기지에 융단폭격을 가했습니다. A 나라의 공격에 대항하여 아이기스 군사 기지에서는 무수히 쏟아지는 폭격 미사일들을 요격하려고 합니다. 이곳에는 백발백중을 자랑하는 요격 시스템이 있지만 운용 비용이 상당하기 때문에 미사일을 최소로 사용해서 모든 폭격 미사일을 요격하려 합니다. A 나라와 B 나라가 싸우고 있는 이 세계는 2 차원 공간으로 이루어져 있습니다. A 나라가 발사한 폭격 미사일은 x 축에 평행한 직선 형태의 모양이며 개구간을 나타내는 정수 쌍 (s, e) 형태로 표현됩니다. B 나라는 특정 x 좌표에.. 2023. 9. 15.
C++ 프로그래머스 Lv1 달리기 경주 [C++] 프로그래머스 Lv1 달리기 경주 문제 설명 얀에서는 매년 달리기 경주가 열립니다. 해설진들은 선수들이 자기 바로 앞의 선수를 추월할 때 추월한 선수의 이름을 부릅니다. 예를 들어 1등부터 3등까지 "mumu", "soe", "poe" 선수들이 순서대로 달리고 있을 때, 해설진이 "soe"선수를 불렀다면 2등인 "soe" 선수가 1등인 "mumu" 선수를 추월했다는 것입니다. 즉 "soe" 선수가 1등, "mumu" 선수가 2등으로 바뀝니다. 선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solut.. 2023. 9. 15.
C++ 자주 사용되는 문법 [C++] 자주 사용되는 문법 반복문 Forfor(초기식;조건식;증감식){ // 구현내용}초기식, 조건식, 증감식은 생략 가능생략 시 구현과정에서 빠져나올 수 있도록 해야한다. whilewhile(조건식){ // 구현 내용}조건식이 참일 경우 실행한다. do ~ whiledo{ // 구현 내용} while (조건식)조건식과 관계없이 최소 한 번은 실행 후 반복 조건을 검사한다.  선택switchswitch ( 기준값 ){ case 선택값: // 이 값일 때 구현 내용 break; case 선택값: // 이 값일 때 구현 내용 break; default: // 그 외 나머지}선택값을 차례대로 보면서 기준값에 해당하는 구현내용을 실행한다.break; 명령이 없을 경우 다음 case.. 2023. 9. 15.
Sort 퀵 정렬(Quick Sort) 알고리즘 [Sort] 퀵 정렬(Quick Sort) 알고리즘 퀵 정렬(Quick Sort) 알고리즘이란?찰스 앤터니 리처드 호어(Charles Antony Richard Hoare)가 개발한 정렬 알고리즘이다다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속하며, 같은 값이 있는 경우 같은 값들의 정렬 이후 순서가 초기 순서와 달라질 수 있어 불안정 정렬에 속한다.N개의 데이터를 정렬할 때, 최악의 경우에는 O(N^2)번의 비교를 수행하고, 평균적으로 O(N log N)번의 비교를 수행한다.매 단계에서 적어도 1개의 원소가 자기 자리를 찾게 되므로 이후 정렬할 개수가 줄어든다.퀵 정렬은 정렬을 위해 평균적으로 O(log N)만큼의 memory를 필요로한다. 최악의 경우 O(n)의 공간복잡도를 보인다.퀵 정렬.. 2023. 9. 14.
C++ BAEKJOON 2751번 : 수 정렬하기2 [C++] BAEKJOON 2751번 : 수 정렬하기2 백준온라인 2751번 수 정렬 문제 문제- N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력- 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.  - 둘째 줄부터 N개의 줄에는 수가 주어진다.  - 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다.  - 수는 중복되지 않는다.출력- 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. 예제 입력 및 출력- input ex) 5 5 4 3 2 1 - output ex) 1 2 3 4 5 문제 풀이 입력 받는 수가 최대 1,000,000개로 크기가 크다. 저장 되는 영역(스택, 힙, 데이터)을 신경쓰도록한다.첫째 .. 2023. 9. 14.
Sort 병합 정렬(Merge Sort) 알고리즘 [Sort] 병합 정렬(Merge Sort) 알고리즘 병합정렬이란?병합 정렬(Merge Sort)은 분할 정복(Divide and Conquer) 방식을 이용한다. 하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음, 두 개의 정렬된 부분 리스트를 합하여 전체가 정렬된 리스트가 되게 하는 방법이다. 병합하는 과정에서 재귀적으로 반복하며 풀어내는 것이 일반적이다.'존 폰 노이만(John von Neumann)'이 1945년에 개발데이터 분포도에 영향을 많이 받지 않아 시간복잡도가 O(NlogN)인 안정적인 정렬 방식에 속한다.두 개의 배열을 병합할 때 병합 결과를 담아 놓을 배열이 추가로 필요하다. 따라서 공간 복잡도는 O(N) 이다.다른 정렬 방법은 연결리스트에서 각 데이터.. 2023. 9. 13.
반응형