본문 바로가기

전체 글246

정렬 - 선택정렬(Selection Sort) 선택정렬(Selection Sort) 지금부터는 다양한 종류의 알고리즘에 대해서 알아보도록 할 것입니다. 알고리즘의 종류는 매우 다양하지만 그 중에서 가장 많이 알려져있는 정렬에 대해서 차근차근 알아보겠습니다. 정렬에는 종류가 다양한데 그 중 가장 기본적인 것은 선택정렬입니다. 1~10까지의 숫자가 무작위로 있을 때 오름차순으로 정렬하는 것을 예시로 많이 사용하여 각 알고리즘의 동작과정을 살펴보는 것이 보편적입니다. 선택정렬은 "가장 작은 것을 선택하여 앞으로 보내는 방법" 입니다. #include using namespace std;int main() { int arr[10] = {1, 10, 5, 8, 7, 6, 4, 3, 2, 9}; int n = 10, minIndex, temp; .. 2025. 1. 31.
알고리즘 - 알고리즘의 정의 알고리즘의 정의안녕하십니까. 알고리즘 카테고리를 만들어놓고 언젠가 정리해야지 하다가 이제야 건들게 되었습니다. 기초부터 차근차근 알고리즘에 대해서 정리할 예정입니다. 그럼 바로 시작하겠습니다. 컴퓨터 구조의 기초알고리즘을 이야기 하기 전에 컴퓨터 구조에 대한 기초적인 내용부터 정리하고 가도록 하겠습니다. 결국 우리가 알고리즘을 짜고 사용하는 이유는 컴퓨터와 밀접한 연관이 있기 때문입니다. 컴퓨터의 정의는 전자회로를 이용한 고속 자동 계산기로 3가지 주요한 구성요소 하드웨어, 소프트웨어, 데이터로 구성되어 있습니다. 컴퓨터에는 다양한 부품이 있지만, 그 중 우리에게 중요한 것은 저장소입니다. 옜날에는 하드디스크를 사용했지만, 요즘은 SSD를 많이 사용합니다. 그런데 하드디스크는 우리가 알고있는 포인터와 비.. 2025. 1. 25.
[프로그래머스] - 구명보트(C++) 구명보트  문제 설명무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작.. 2025. 1. 8.
[프로그래머스] - 영어 끝말잇기(C++) 영어 끝말잇기 문제 설명1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 2. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 3. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 4. 이전에 등장했던 단어는 사용할 수 없습니다. 5. 한 글자인 단어는 인정되지 않습니다. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다.  1번 사람이 자신의 첫 번째 차례에 tank를 말합니.. 2024. 12. 28.
[메이플스토리] - 하이퍼버닝MAX, 챌린저스 월드 하이퍼버닝MAX, 챌린저스 월드이번에는 메이플 소식입니다. 지난 12월 07일 NEXT 쇼케이스를 진행했습니다. 쇼케이스 내용을 간단하게 살펴보고 당장 12월 19일에 시작된 이벤트에 대한 내용을 이야기 해보도록 하겠습니다. 위 이미지는 NEXT 쇼케이스의 로드맵입니다. 딱봐도 느껴지시겠지만 매우 알찬 구성으로 성공적인 마무리를 하였습니다. 쇼케이스 관련해서는 사전 방송 보상으로 극성비 25개를 받거나, 쇼케이스를 유출한 사람을 공식적으로 형사처벌을 하는 등 다양한 사건이 있었지만, 저희가 오늘 살펴 볼 내용은 위 로드맵의 첫 부분에 있는 12월 19일부터 시작된 내용입니다. 마스터리 코어 완성 6차 스킬에서 기존에 주력으로 사용하는 일부 스킬을 강화시키는 마스터리 코어가 드디어 총 4개로 모두 등장했습.. 2024. 12. 23.
[프로그래머스] - 점프와 순간이동(C++) 점프와 순간이동 문제 설명OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합니다. 아이언 슈트 구매자가 이동하려는 거리 N이 주어졌을 때, 사용해야 하는 건전지 사용량의 최솟값.. 2024. 12. 13.
[프로그래머스] - N개의 최소공배수(C++) N개의 최소공배수 문제 설명두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 제한사항arr은 길이 1이상, 15이하인 배열입니다.arr의 원소는 100 이하인 자연수입니다. 입출력 예arrresult[2, 6, 8, 14]168[1, 2, 3]6 시작 코드#include #include using namespace std;int solution(vec.. 2024. 12. 8.
[프로그래머스] - 카펫(C++) 카펫 문제 설명Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁.. 2024. 12. 3.
[프로그래머스] - 짝지어 제거하기(C++) 짝지어 제거하기 문제 설명짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다. 예를 들어, 문자열 S = baabaa 라면 b aa baa → bb aa → aa → 의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다. 제한사항문자열의 길이 : 1,000,000이하의 자연수문자열은 모두 소문자로 이루어져 .. 2024. 11. 27.
[프로그래머스] - 피보나치 수(C++) 피보나치 수 문제 설명피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어  F(2) = F(0) + F(1) = 0 + 1 = 1F(3) = F(1) + F(2) = 1 + 1 = 2F(4) = F(2) + F(3) = 1 + 2 = 3F(5) = F(3) + F(4) = 2 + 3 = 5와 같이 이어집니다.2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요. 제한사항n은 2 이상 100,000 이하인 자연수입니다. 입출력 예nresult3255 시작 코드#include #include using namespace std;.. 2024. 11. 26.
[프로그래머스] - 다음 큰 숫자(C++) 다음 큰 숫자 문제 설명자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요. 제한사항n은 1,000,000 이하의 자연수 입니다. 입출력 예nresult78831523 시작 코드#include #include using namespace std;int solution(int n.. 2024. 11. 25.
[프로그래머스] - 숫자의 표현(C++) 숫자의 표현 문제 설명Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.  1 + 2 + 3 + 4 + 5 = 154 + 5 + 6 = 157 + 8 = 1515 = 15자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요. 제한사항n은 10,000 이하의 자연수 입니다. 입출력 예nresult154 시작 코드#include #include using namespace std;int solution(int n) { int answer = 0; return an.. 2024. 11. 24.