'Backjoon' 태그의 글 목록 (3 Page)
본문 바로가기

Backjoon55

백준 2798_블랙잭 [C++] 문제 풀이 이 문제는 본인이 뽑은 카드의 합이 21이 넘지 않는 선에서 카드의 합을 최대한 크게 만드는 블랙잭에서 가져온 문제로, 카드의 수 n과 임의의 수 m을 입력받은 다음, n개 만큼의 숫자를 입력받아 주어진 숫자 중 3개를 조합하여 m이 넘지않는 최대값이 얼마인지를 출력하는 문제입니다. 즉 카드 3장으로 만들 수 있는 모든 경우의 수를 비교한 후 최대값을 찾아야 하므로, 조합 가능한 경우를 모두 대입해보는 브루트포스(brute force) 를 이용하면 해결할 수 있습니다. 조금 더 자세히 설명하면 입력받은 n개의 수 중에서 card[0] + card[1] + card[2] -> card[0] + card[1] + card[3] -> card[0] + card[1] + card[4] ...... 이.. 2022. 6. 28.
백준 10872_팩토리얼 [C++] 문제 풀이 이 문제도 피보나치 수와 마찬가지로 팩토리얼에 대한 이해가 있으면 굉장히 쉽게 해결할 수 있는 문제입니다. 특정 수 n에 대한 팩토리얼은 n! 과 같이 나타내고, 이것은 n * (n-1) * (n-2) *......* 2 * 1 로 나타낼 수 있습니다. 즉 n 부터 1까지의 모든 수를 곱한 값을 출력하면 되는 문제입니다. 코드로 나타내면 아래와 같습니다. 소스코드 #include using namespace std; int factorial(int a){ int value=1; for (int i = a; i >0 ; i--) { value*= i; } if(a==0) return 1; else return value; } int main(){ int n; cin >> n; cout 2022. 6. 26.
백준 10870_피보나치 수 5 [C++] 문제 풀이 이 문제는 기존에 피보나치에 대해 알고 있다면 쉽게 해결할 수 있는 문제입니다. 피보나치 수는 첫번째와 두번째는 0과 1로 시작하여, 그 이후의 n번째의 값은 n-2와 n-1의 합, 즉 (n-2) + (n-1) 이 됩니다. 이 문제에서는 n의 값을 입력하고, n번째의 값을 출력해주는 문제로, 배열을 하나 생성하여 arr[0]=0 , arr[1]=1, 그 이후의 값은 arr[n-2] + arr[n-1] 이 되고, 최종적으로 입력받은 값 n에 대한 arr[n]의 값을 출력하면 됩니다. 코드로 작성하면 아래와 같습니다. 소스코드 #include using namespace std; int Fibonacci(int a){ int value[21]={0,}; for (int i = 0; i > n; c.. 2022. 6. 26.
백준 1011_Fly to the Alpha Centauri [C++] 문제 풀이 이 문제는 문제를 이해하는데에는 큰 시간이 걸리지 않았던 것 같은데, 풀이를 하는 과정에서 반복문을 사용할 경우 시간이 초과되는 문제가 발생해서 애를 먹었던 문제입니다. 이 문제에서 처음 이동할 수 있는 거리는 -1,0,1 이나 실질적으로 -1과 0의 거리를 이동할 일이 없기 때문에 1만큼 이동하고, 그 다음은 0,1,2 의 거리를 이동할 수 있다는 뜻입니다. 그리고 도착 직전 마지막 이동거리는 1이 되어야 하므로, 마지막 이동 직전 거리는 1또는 2라는 것을 알 수 있습니다. 이런식으로 거리에 따른 이동 수를 나타내어 규칙을 알아보겠습니다. 총 이동거리(y-x) 이동거리 이동 수 1 1 1 2 11 2 3 111 3 4 121 3 5 1211 4 6 1221 4 7 12211 5 8 1222.. 2022. 6. 25.
백준 2839_설탕 배달[C++] 문제 풀이 이 문제는 N 을 5와 3을 순서대로 나누었을때 나올 수 있는 최소값을 구하는 문제입니다. N kg의 설탕이 있을 때 5kg와 3kg 봉지에 담았을 때 최소 몇봉지가 나오는지를 구하면 되는 문제로 어렵지 않게 풀이를 진행할 수 있습니다. 잘 생각해보면 3kg 봉지에 설탕을 먼저 담는 것 보다 5kg 봉지에 담을 수 있는 만큼 담은 다음, 남은 양을 3kg에 담는 것이 더 적은 수의 봉지를 사용하여 담을 수 있는 방법입니다. 즉 5로 나눌 수 있는 만큼 나누어보고, 안되면 3으로 나누어지는지를 확인하면 됩니다. 코드는 아래와 같습니다. 소스코드 #include using namespace std; int main(){ int n,cnt=0; cin >>n; cnt=n/5; if (n%5 !=0).. 2022. 2. 20.
백준 2775_부녀회장이 될테야[C++] 문제 풀이 이 문제에서 a층 b호에 거주하는 인원의 수는 그 아래층의 1호부터 b호까지의 거주인원수를 다 더한 인원입니다. 예를 들어 1층 4호에 산다고 가정하면 0층 1호~ 0층 4호까지 거주하는 인원수를 더해주면 됩니다. 즉 1층 4호의 거주인원 = 1+2+3+4= 4명이 살게 됩니다. 이것을 풀이하면 입력받는 a층 b호 만큼의 배열을 생성한 후, 이중for문을 이용하여 0층의 1호 부터 b호까지는 1부터 시작해서 1씩 커지게 값을 넣어주면 되고, 1층 부터는 [층수-1][0]~[층수-1][현재 호수] 까지의 값을 더해서 배열에 저장해주면 됩니다. 소스코드 #include using namespace std; int main(){ int t,k,n; cin >> t; for (int i = 0; i .. 2022. 2. 20.
백준 10250_ACM 호텔[C++] 문제 풀이 이 문제에서 손님들은 가까운 방을 선호하고 엘리베이터를 타는 경우는 신경쓰지 않는다고 되어있습니다. 만약 7층짜리 건물이 있다면 손님에게 방을 배정하게 될 경우 1호 라인, 즉 101~701호 까지 모든 방을 배정한 후에 2호 라인에 손님을 배정할 수 있습니다. 이런 방식으로 방을 배정하게 되면 풀이 방법은 다음과 같습니다. ABC라는 세 자리수가 있을 경우 먼저 층마다 가장 가까운 1호부터 배정하여야 하므로 A가 호텔의 층 수 만큼 증가할 것입니다. 그 다음 A가 정해진 층수를 모두 채우게 되면 A는 다시 1이 되고 C에 해당하는 수가 1 증가하고, 다시 A가 층 수 만큼 증가하는 것이 반복됩니다. 또한 C가 9일 경우 증가하게 되면 C는 0이 되고, B는 1이 증가하게 됩니다. 이런식으로 .. 2022. 1. 25.
백준 1193_분수찾기[C++] 문제 풀이 이 문제는 저도 이해하고 규칙을 찾는데 꽤 오랜 시간이 걸리는 문제였습니다. 먼저 문제에서 1/1->1/2->2/1->3/1->2/2->1/3->1/4 ... 이런식으로 분모와 분자가 대각선 방향으로 반대로 커지거나 작아지며, 작아지다가 1/n 또는 n/1이 되면 n+1을 해주고 위의 과정을 반복하는 방식으로 배열이 구성되어 있습니다. 위 설명에서 대각선에 대한 규칙이 있습니다. 대각선이 홀수인 경우에는 분자가 증가하고, 반대로 짝수인 경우에는 분모가 증가한다는 것입니다. 따라서 분자가 구해지면 분모는 (대각선의 단계-분자 수+1)의 공식이 성립하게 됩니다 (반대로 분모를 먼저 구하는 경우에도 마찬가지입니다). 이 공식을 활용하여 소스코드를 작성하면 다음과 같습니다. 소스코드 #include .. 2022. 1. 25.
백준 2869_달팽이는 올라가고 싶다[C++] 문제 풀이 이 문제는 총 높이 V와 하루에 오르는 높이 A, 자는 동안 떨어지는 높이 B 만 계산해서 다 오르는데 며칠이 걸리는지 구하는 쉬운 편에 속하는 문제입니다. 그러나 이 문제에서 고려해야 하는 조건이 하나 있다면, A만큼 오르고 B만큼 미끄러짐을 반복하다가 A만큼 올랐을 때 높이가 딱 V가 된 경우, 미끄러지는 것을 고려하지 않고 거기서 프로그램이 종료되어야 합니다. 이 점을 고려하여 소스코드를 작성하면 다음과 같습니다. 소스코드 #include #include using namespace std; int main(){ int a,b,v; int cnt=0; cin >> a >> b >> v; if((v-b)%(a-b)==0){ cnt=(v-b)/(a-b); }else{ cnt=(v-b)/(a-.. 2022. 1. 24.