728x90

프로그래밍/C, C++ 20

[C] 백준 2750 수 정렬하기

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 학습 여러가지 정렬을 적용할 수 있지만, 나는 그 중에서도 버블정렬을 사용하였다. 버블정렬은 서로 인접한 숫자끼리 비교한 후 num[i-1]이 num[i]보다 크면 서로 교환하는 정렬이다. 버블정렬을 잘 이해하고 있으면 tmp변수를 하나 만들어 num[i],num[i-1]을 서로 교환하는 코드를 작성하는 것은 떠올릴 수 있을 것이다. 한 번의 버블이 끝나면 flag의 값을 1씩 증가시키고, 입력받은 N-1과 같아지면 break문을 통해서 ..

[C] 백준 7568 덩치

문제우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는 C가 더 크므로, "덩치"로만 볼 ..

[C] 백준 1065 한수

문제어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.학습문제를 정확하게 이해하기 위해 예제로 주어진 입력과 출력을 살펴보았다. 예제 1번(110 -> 99)을 통해 100 미만의 수는 등차수열을 이루는 조건이 부족하므로 (예, 45, 56은 공차가 1로 판단) 전부 한수에 포함된다는 것을 알게되었다. 따라서 100미만의 수는 입력 N을 그대로 출력해준다. 입력받은 세자리 수 정수를 각각의 자리수로 분리하여 저장한 후 공차에 따라 cnt를 증가시킨 후..

[C] 동아리 5주차 활동 (정수의 자리수 분리)

문제 이번주차 우리 동아리의 연습문제이다. 보기에는 쉬워보이지만 막상 코딩하려하니 조금 시간이 걸렸던..(나만 그럴수도 ㅎㅎ) 초보개발자라 그런지 머리속에 있는 생각을 그대로 구현해내지를 못해서 답답하고 억울한(?) 시간이였다. 그래도 마지막에는 내가 생각했던대로 구현할 수 있어서 뿌듯한 문제기도 했다. 학습 처음에 보고 꽤 재미있는 문제라고 생각했다. 우선적으로 들었던 생각은 세자리 수를 각각의 자릿수로 분리해서 배열에 저장한다음 곱셈의 원리에 따라 다시 더해주어서 마지막 합에 저장하면 어떨까 싶었다. 그러나 마음처럼 잘 되지 않았고 , 그 이유는 함수 div를 선언하여 배열 자체를 넘겨주고 싶었는데 그러면 포인터를 써야 한다는 생각에 지레 겁을 먹었기 때문이다. 그 다음 시도했던 방법은 그냥 정수를 ..

[C] 정수의 자리수 분리

문제 두개의 정수가 입력되었을 때 각 정수를 분리하여라 학습 기초적인 알고리즘이다. 나머지 연산자를 이용하여 하나하나 찍는 방법과 while 반복문을 사용하는 방법 두가지를 모두 작성해보았다. 후에 이를 활용하여 다양한 알고리즘을 짤 수 있을거라 예상한다. (사실 내가 매번 헷갈려서 백업용으로 적어놓는 것!ㅎㅎ ) 코드 #include int main(){ int a, b; scanf("%d %d", &a, &b); //1. printf("1의 자리수 %d \n", a % 10); a = a / 10; printf("10의 자리수 %d \n", a % 10); a = a / 10; printf("100의 자리수 %d \n", a % 10); //2. int c; while(b!=0) { c = b % 1..

[C] 백준 4949 균형잡힌세상 ⚖

*추후 수정예정#define _CRT_SECURE_NO_WARNINGS #include #include #define SIZE 101 //IDEA //1. (,),[,],를 만날때 마다 스택에 push하거나 pop하면서 //균형잡인 문자열인지 판단한다 //2. (,),[,]를 만나면 스택에 쌓는다 //3. ),]를 만나면 스택 맨 윗 부분과 비교하여 pop해준다 //4. 짝을 이루지 않는다면 push한다. //5. 스택의 인덱스를 가르키는 top가 -1라면 스택에 데이터가 //없다는 뜻이므로 균형잡힌 문자열이다. char stack[SIZE]; int top = -1; int push(int n) { if (top >= SIZE - 1) return -1; return stack[++top] = n; }..

[C] 백준 2798 블랙잭 🃏

문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. -N장의 카드에 써져 있는 숫자가 주어졌을 때,..

[C] 백준 9012 괄호

문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다. 여러분은 입력으로 주어진 괄호 문자열..

[C] 백준 10870 피보나치

문제피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.n=17일때 까지 피보나치 수를 써보면 다음과 같다.0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.학습나는 재귀 문제를 풀 때 마다 바보가된 것 같은 느낌을 받는다.. 피보나치 문제는 사실 굉장히 고전문제라 C에 처음 입문할 때 이미 풀어봤던 문제였기에 쉽게 풀 수 있을거라 생각했지만... 머리가 안돌아가서 F1 = F2; F2 ..

[C] 백준 10872 팩토리얼

문제 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 학습 문제 자체는 쉬운 편이였으나 좋은 알고리즘이란 무엇인가에 대해 고찰해본 후 나는 문제를 푸는 것만이 다가 아니라는 것을 새롭게 알게되었다. 이번과 같은 문제도 여러가지 방법으로 풀 수 있을텐데, 예를들면 내가 작성한 코드 외에도 입력받고 sum으로 더하는 부분을 함수로 작성하는 등이 있다. 조금 쉬운 문제는 여러 방법으로 고안하여 백준(BOJ) 숏코딩 랭커가 될 수 있도록 한번 생각해보아야겠다. 이 문제의 숏코딩 랭커 코드길이는 48B~55B정도 된다. 필자도 코드를 최대한 줄여보려고 했으나 138B가 최대였다..(랭킹으로 따지자면 350등 정도다) 아직 한참 부족하다고 느꼈다. 무튼! 코드를 제출했다고 문..

728x90