Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Jinny Kong’s blog

18th Koala 8주차 본문

KOALA

18th Koala 8주차

Jinny Kong 2025. 5. 25. 18:32

우왓 벌써 코알라 8주차라니!! 믿기지 않는다...₍ᐢ⑅•ω•⑅ᐢ₎ദ⸒⸒

 

이번에 코알라를 하면서 배운게 정말 많지만 빠진 주차가 몇 개 있다보니.. 그리고 내가 모르는게 정말 많은 탓에 여전히 부족함을 느끼는 것 같다..(/-᷄ ᴗ -᷅\ *)💦

그리고 C++로 하다보니 좀 더 신경써야할 부분이라던지 좀 더 복잡한 부분이 있는 것 같아서 방학때는 그냥 파이썬으로 알고리즘 공부를 해볼까한다... 파이썬으로 좀 더 공부한 후에 여유가 되면 C++로 하는게 더 나을 것 같다는 생각이 들었ㄷr ...(´,,•﹃ •,,`)

 

 

오늘 소개할 문제는 바로 이 문제이다!! ( 𓏸˙ ᴗ˙𓏸)

 

백준 14650번 : 걷다보니 신천역 삼 (Small) 

 

 

 

백준에서 가끔 이런 컨셉문구(쓸데없는st)가 문제 설명에 들어있으면 나도 모르게 문제 읽다가 피식하는 것 같다 ㅋㅋ ( •˓◞•̀ )

 

 

여튼 이 문제는 0, 1, 2 이 3개의 숫자만을 가지고 N자리 3의배수의 개수를 출력하는 문제이다.

 

 

1. 입력 및 변수 초기화

#include <iostream>
using namespace std;

int count = 0;
int N;

 

먼저 문제에서 주어지는 자릿수 N을 입력받기 위해 전역 변수로 선언해주고, 조건을 만족하는 경우의 수를 셀 count 변수도 0으로 초기화해줬다!!

 

 

2. 재귀함수 정의

void generateNumbers(int length, int sum) {
    if (length == N) {
        if (sum % 3 == 0) {
            count++;
        }
        return;
    }

    for (int i = 0; i <= 2; i++) {
        if (length == 0 && i == 0) continue;
        generateNumbers(length + 1, sum + i);
    }
}

 

이 함수가 이 코드의 핵심이다!! 재귀적으로 숫자를 하나씩 만들어가며, 길이가 N에 도달했을 때 각 자릿수의 합이 3의 배수인지 확인해주는 구조이다!!

  • length == N일 때 → 자릿수를 다 만들었을 때를 의미!!
  • sum % 3 == 0이면 → 3의 배수니까 count++ 해주기
  • 그 외에는 0, 1, 2 중 하나를 골라서 다음 자리로 간다
  • 다만 첫 자리는 0이면 안 되기 때문에 length == 0 && i == 0 조건으로 걸러줬다

이런식으로 완전탐색처럼 모든 경우를 다 만들어보는 방식이다!! ¡¡¡( •̀ ᴗ •́ )و!!!

 

 

3. 메인함수 및 출력

int main() {
    cin >> N;
    generateNumbers(0, 0);
    cout << count << endl;
    return 0;
}

 

여기서 N 입력받고, generateNumbers(0, 0)으로 처음 재귀 호출 시작해주면 된다!! 처음엔 자리도 없고 합도 0이니까 (0, 0)으로 시작한다. 마지막으로 지금까지 센 count를 출력해주기만 하면 끝이다~! ჱ̒⸝⸝•̀֊•́⸝⸝)‪

 

처음에 이 재귀흐름을 캐치하기 어려워서 조금 더 이해를 돕기 위해 내가 그림으로 그렸던 그림이다!!

N=3인 경우에 재귀함수의 흐름이 어떻게 동작하는지 트리구조로 그려가면서 이해했다!! ໒(⊙ᴗ⊙)७✎▤

 

 

 

그리고 전체 코드는 이러하다!!

 

#include <iostream>
using namespace std;

int count = 0;
int N;

void generateNumbers(int length, int sum) {
    if (length == N) {
        if (sum % 3 == 0) {
            count++;
        }
        return;
    }

    for (int i = 0; i <= 2; i++) {
        if (length == 0 && i == 0) continue;
        generateNumbers(length + 1, sum + i);
    }
}

int main() {
    cin >> N;
    generateNumbers(0, 0);
    cout << count << endl;
    return 0;
}

 

 

 

지금까지 알고리즘 문제를 풀면서 재밌다는 생각이 든 문제가 크게 없었는데 재귀함수 파트는 유난히 재미있는 것 같다.. ◔.̮◔✧

 

생각의 흐름을 조금 바꿔야해서 그런 것 같기도 하고...!! 여튼 문제를 재귀흐름으로 바꾸어서 푸는 과정이 어렵긴하지만 생각보다 문제가 쉽게 풀린다는게 신기한 그런 파트인 것 같다!!! (~ ᵕ ̫ ᵕ)~

 

 

 

벌써 코알라 활동이 끝낫다니... 그리고 시험도 2주 남았다는게 믿기지가 않는다 ‧⁺(இㅅஇ⸝⸝ ) 시간이 왜이리 빠른지....ㅜ

 

남은기간동안 열시미해서 무사히 종강하고 방학때는 알고리즘 공부를 더 열시미 해야겟다는 생각이 든다...!!! ʸᵉᵃʰ( ᐛ✌️)~~

 

화이팅~~~~!!! \\\ ٩(๑❛ワ❛๑)و ////\\\ ٩(๑❛ワ❛๑)و ////\\\ ٩(๑❛ワ❛๑)و ////

 

코알라 8주차 끗~~!!!! ヾ(๑╹◡╹)ノ"

 

 

 

 

 

 

 

 

 

'KOALA' 카테고리의 다른 글

19th KOALA 2주차  (0) 2025.07.13
19th KOALA 1주차  (0) 2025.07.06
18th Koala 7주차  (1) 2025.05.18
18th Koala 5주차  (1) 2025.05.04
18th Koala 4주차  (2) 2025.04.13