c 22

백준_1934_최소공배수

최소공배수를 구하는 문제입니다. 중학교 때 배웠던 소인수분해를 기억하시나요? 만약 8과 16이라는 두 수가 주어졌을 때, 소인수분해를 통해 최대공약수와 최소공배수를 구할 수 있습니다.아래의 표는 소인수분해의 과정을 나타낸 것입니다.2816248224 12 여기서 좌측의 노란색 배경 숫자들을 곱하면 최대공약수, 최대공약수에 초록 배경 숫자들까지 곱해주면 최소공배수를 구할 수 있습니다. 8과 16의 최대공약수는 2*2*2 = 8 이 되겠고,최소공배수는 2*2*2*1*2 = 16 이 되겠죠. 소인수분해의 과정만 코드로 구현한다면, 이 문제를 해결할 수 있습니다.  최대공약수,최소공배수 구하는 함수)int common(int a, int b){ int divisor = 1; for (int i = 2..

백준/c 2024.05.01

백준_2751_수정렬하기2_(radixSort)

문제는 매우 단순합니다. N을 입력받아 N번 숫자를 입력받은 후 오름차순으로 정렬하는 문제입니다. 하지만 제한시간이 2초라는 점을 감안해야 할 것 같습니다. 시간이 짧으므로, 시간 복잡도가 작은 기수 정렬 (radix sort) 를 활용해 문제를 풀어보겠습니다. https://sol248.tistory.com/17 백준_10845_큐(queue)큐를 구현하는 문제입니다.   큐의 개념)큐는 먼저 넣은 데이터가 먼저 나오는 선입선출(FIFO)의 형태를 가지고 있습니다. 나중에 넣은 데이터가 먼저 나오는 스택과는 정반대의 성질을 지니고sol248.tistory.com바로 이전에 큐 문제를 푼 적이 있습니다. 이 문제도 원형 큐를 이용한 기수정렬로 풀 것이기에, 큐에 대해 모르시는 분은 10845_큐 문제를 ..

백준/c 2024.05.01

백준_2775_부녀회장이될테야

규칙이 있는 아파트 문제입니다. a층의 b 호에 살기 위해서는 a-1층의 1호~b호 까지의 사람의 합 만큼 사람을 데려와야 한다는 규칙이 있습니다. 처음에는 반복문을 통해 시그마를 구현하고 하나하나 다 더해서 풀어야 하나 생각을 했지만 더 간단한 방법이 있었습니다. 아파트를 표로 구현해보았습니다.아래 표에서 규칙을 찾으면, 문제를 쉽게 풀 수 있을 것 같습니다.2층1명4명10명20명35명56명84명120명165명1층1명3명6명10명15명21명28명36명45명0층1명2명3명4명5명6명7명8명9명 __1호__2호__3호__4호__5호__6호__7호__8호__9호 규칙이 보이시나요?? 해당 호수에 몇명이 살고 있는지 구하기 위해서는, 같은 층의 이전 호수와, 바로 아래층의 같은 호수에 살고 있는 사람 수를 더..

백준/c 2024.04.28

백준_2869_달팽이는올라가고싶어

달팽이가 올라가는데 며칠이 걸리는지 구하는 문제입니다. 조건은 고려하지 않고 문제만 보면 쉬워보여서 바로 코드를 짜보았습니다. #include int main(void){ int A, B, V; scanf("%d %d %d", &A, &B, &V); int i = 1; int height = 0; int count = 0; while (i) { height = height + A; count++; if (height >= V) { break; } height = height - B; } printf("%d\n", count); return 0;}  단순히 다..

백준/c 2024.04.28

백준_1259_팰린드롬수

팰린드롬에 대한 문제입니다. 문제에 나와있다시피, radar 와 sees 같이 뒤에서부터 읽어도 똑같다면 그 단어는 팰린드롬입니다. 숫자도 마찬가지로, 121 이나 12421 같이 뒤에서부터 읽어도 똑같으면 팰린드롬수 입니다. 숫자를 입력받아 팰린드롬수인지 아닌지 판별하는 프로그램을 작성해 봅시다.   1. 0이 입력될 때까지 종료되지 않아야 하므로 무한루프에 0이 입력되면 종료되도록 하는 조건을 넣습니다. while (1){ scanf("%d", &num); if (num == 0) // num이 0이면 종료 { return 0; }}   2. 입력받은 num의 자리수를 세고, number 배열에는 그대로, check 배열에는 역순으로 넣습니다. (비교하기 쉽도록 배열..

백준/c 2024.04.25

백준_10811_바구니뒤집기

바로 이전에 풀었던 10810_공넣기 문제의 응용 버전입니다. 바구니의 개수와 움직일 횟수를 받는 것 까지는 동일하지만, 이 문제에서는 입력받은 범위의 바구니를 역순으로 바꾸어야 합니다.  바구니를 역순으로 바꾸기 위해서, 임시 배열을 만들고 0으로 초기화까지 해주었습니다.int temp[N]; for (int s = 0; s   그다음, 바구니의 범위 (i,j) 를 입력받아 임시 배열에 역순으로 저장해주었습니다.scanf("%d %d", &i, &j);for (int q = 0; q   마지막으로, 임시 배열에 있는 역순을 바구니 배열에 넣으면 입력받은 i ~ j 범위의 바구니가 역순으로 바뀌게 되는 것이죠.for (int r = i - 1; r   ..

백준/c 2024.04.24

백준_10810_공넣기

바구니에 공을 넣는 문제입니다. 공이 들어가지 않으면 0을 출력해야 하므로 배열을 만들고 0으로 초기화를 해줘야 할 것 같습니다. 또한, i번 바구니부터 j번 바구니까지 공을 넣는데 배열의 인덱스는 0부터 시작하므로 이 점을 주의해야 할 것 같습니다. 전체 코드) #include int main(void) { // 바구니의 개수와 공을 넣을 횟수 입력받기 int N = 0, M = 0; scanf("%d %d", &N, &M); // 바구니 배열 생성하고 초기화 int basket[N]; for (int i = 0; i < N; i++) { basket[i] = 0; } // 공을 넣을 바구니의 범위와 공의 번호를 입력받아 바구니에 넣기 int i = 0, j = 0, k = 0; for (int p =..

백준/c 2024.04.24

백준_2525_오븐시계

문제 풀기 전 생각) 시간이 24가 되면 0으로 바꾸는 것, 60분이 넘어가면 시간이 1 늘어나는 것만 신경쓰면 될 것 같습니다. 풀이) 걸리는 시간(time)을 현재 분(min)에 더한 뒤, 분이 60분을 넘어갔을 때와 시간이 24시가 되었을 때의 조건을 추가해주었습니다. 전체 코드) #include int main(void) { int hour = 0, min = 0, time = 0; scanf("%d %d\n%d", &hour, &min, &time); min += time; if (min >= 60) { hour += min / 60; min %= 60; if (hour >= 24) { hour -= 24; } } printf("%d %d\n", hour, min); return 0; } 60분..

백준/c 2024.04.23

백준_10926_??!

입력한 문자열 뒤에 ??! 만 붙여 출력하면 되는 간단한 문제입니다. 하지만 아래와 같이 코드를 작성하면 printf("%s??!",id); 이런 warning 이 나옵니다. stackoverflow를 살펴보니, ??! 은 \ 로 대체된다고 합니다. ??! 이외에도 다른 문자들도 있으니 주의해야 할 것 같습니다.. 어쩐지 문제가 너어무 쉽다 했네요.. ISO 646 character set(문자 모음)은 C의 모든 문자를 포함하고 있지 않으므로 \를 이용해야 한다고 합니다. 전체 코드) #include int main(void) { char id[51] = {0}; scanf("%s", id); printf("%s\?\?!\n", id); return 0; } trigraph에 대해 알아보기 위한 문제인..

백준/c 2024.04.23

백준_2798_블랙잭

문제설명) 자연수가 적힌 N장의 카드를 숫자가 보이도록 바닥에 놓고 M을 외친다. 플레이어는 M을 넘지 않으면서 M과 가장 가깝도록 3장의 카드를 고른다. N장의 카드에 써져있는 숫자가 주어졌을 때, 카드 3장의 합을 구하시오. 문제 풀기 전 생각) 100장 이하의 카드가 주어지므로, 배열과 반복문을 이용하여 풀면 괜찮을 것 같습니다. 풀이) N,M 을 입력받은 후 N만큼 배열을 입력받습니다. 그 후, 3중 for 문을 이용하여 M과 가장 가까우면서 가장 큰 값을 찾습니다. 이때, 카드의 합이 M을 넘으면 안되므로, 조건을 추가해줍니다. 또한 카드의 합이 M과 같아지면 더이상 탐색의 의미가 없으므로 그 값을 출력하고 즉시 종료합니다. 전체 코드) #include int main(void) { int N ..

백준/c 2024.04.22