2025/03 17

[Python | 25501] 재귀의 귀재

https://www.acmicpc.net/problem/25501문제 설명정휘는 후배들이 재귀 함수를 잘 다루는 재귀의 귀재인지 알아보기 위해 재귀 함수와 관련된 문제를 출제하기로 했다.팰린드롬이란, 앞에서부터 읽었을 때와 뒤에서부터 읽었을 때가 같은 문자열을 말한다. 팰린드롬의 예시로 AAA, ABBA, ABABA 등이 있고, 팰린드롬이 아닌 문자열의 예시로 ABCA, PALINDROME 등이 있다.어떤 문자열이 팰린드롬인지 판별하는 문제는 재귀 함수를 이용해 쉽게 해결할 수 있다. 아래 코드의 isPalindrome 함수는 주어진 문자열이 팰린드롬이면 1, 팰린드롬이 아니면 0을 반환하는 함수다.#include #include int recursion(const char *s, int l, int ..

Algorithm/Baekjoon 2025.03.30

[Python | 11729] 하노이 탑 이동 순서

https://www.acmicpc.net/problem/11729문제 설명세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다.한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다.쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다.이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다.아래 그림은 원판이 5개인 경우의 예시이다. 📌 시간 제한: 1초입력첫째 줄에 첫 번째 장대에 쌓인 원판의 개수 N (1 ≤ N ≤ 20)이 주어진다.출력첫째 줄에 옮긴 횟수 K를 출력한다.두 번째 줄부터 ..

Algorithm/Baekjoon 2025.03.30

[Algorithm] 재귀(Recursion) 알고리즘

재귀란?재귀(Recursion)는 함수가 자기 자신을 호출하는 방식으로 문제를 해결하는 알고리즘 기법이다. 보통 하나의 큰 문제를 동일한 구조를 가진 더 작은 하위 문제로 나누어 해결하는 방식으로, 수학적 귀납법과 유사한 방식으로 작동한다.재귀는 반복문처럼 루프를 돌며 문제를 해결할 수 있지만, 특히 트리 구조, 분할 정복, 백트래킹 등의 알고리즘에서는 반복문보다 재귀가 더 자연스럽고 간결한 표현되는 경우가 많다. 알고리즘 구조재귀 함수는 보통 두 가지 핵심 요소로 구성된다:기저 조건(Base Case)더 이상 재귀를 진행하지 않고 함수를 종료시키는 조건이다. 반드시 필요하며, 없을 경우 무한히 자기 자신을 호출하게 되어 스택 오버플로우(Stack Overflow) 가 발생한다.재귀 호출(Recursiv..

Algorithm/Deep Dive 2025.03.30

[Python | 11047] 동전 0

https://www.acmicpc.net/problem/11047문제 설명준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 📌 시간 제한: 1초입력첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)출력첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.문제 접근우리는 N개의 동전 종류를 가지고 있고, 각각의 동전 가치는 오름차순으로 주..

Algorithm/Baekjoon 2025.03.28

[cs231n] Lecture 2 | Image Classification with Linear Classifiers

✔  본 글은 Stanford Univ. Spring 2024 CS231n 강의 "Lecture 2: Image Classification with Linear Classifiers"를 바탕으로 정리한 내용입니다.📌 강의 영상: YouTube📄 강의 슬라이드: PDF 링크Image ClassificationImage Classification(이미지 분류)은 이미지를 입력으로 받은 후, 미리 정해놓은 카테고리 집합(예를 들어 개, 고양이, 트럭 등) 중 어떤 카테고리에 속할지를 고르는 것입니다.우리의 시각 체계는 시각 인식 태스크에 고도화되어 있으므로 이미지 인식에 문제가 없겠지만, 기계의 관점에서는 다릅니다.컴퓨터는 아래와 같이 이미지를 격자 모양의 숫자집합으로밖에 보질 못하며, 각 픽셀은 RGB로..

cs231n 2025.03.26

[Python | 6198] 옥상 정원 꾸미기

https://www.acmicpc.net/problem/6198문제 설명 도시에는 N개의 빌딩이 있다.빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다.i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으로만 볼 수 있다.i번째 빌딩 관리인이 볼 수 있는 다른 빌딩의 옥상 정원은 i+1, i+2, .... , N이다.그런데 자신이 위치한 빌딩보다 높거나 같은 빌딩이 있으면 그 다음에 있는 모든 빌딩의 옥상은 보지 못한다.예) N=6, H = {10, 3, 7, 4, 12, 2}인 경우 = = = = - = = = = -> 관리인이 보는 방향 = - = = =..

Algorithm/Baekjoon 2025.03.21

[Python | 2910] 빈도 정렬

https://www.acmicpc.net/problem/2910문제 설명위대한 해커 창영이는 모든 암호를 깨는 방법을 발견했다. 그 방법은 빈도를 조사하는 것이다.창영이는 말할 수 없는 방법을 이용해서 현우가 강산이에게 보내는 메시지를 획득했다. 이 메시지는 숫자 N개로 이루어진 수열이고, 숫자는 모두 C보다 작거나 같다. 창영이는 이 숫자를 자주 등장하는 빈도순대로 정렬하려고 한다.만약, 수열의 두 수 X와 Y가 있을 때, X가 Y보다 수열에서 많이 등장하는 경우에는 X가 Y보다 앞에 있어야 한다. 만약, 등장하는 횟수가 같다면, 먼저 나온 것이 앞에 있어야 한다.이렇게 정렬하는 방법을 빈도 정렬이라고 한다.수열이 주어졌을 때, 빈도 정렬을 하는 프로그램을 작성하시오. 📌 시간 제한: 1초입력첫째 ..

Algorithm/Baekjoon 2025.03.20

[Python | Level2] 캐시 / 2018 KAKAO BLIND RECRUITMENT

https://school.programmers.co.kr/learn/courses/30/lessons/17680 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 설명지도개발팀에서 근무하는 제이지는 지도에서 도시 이름을 검색하면 해당 도시와 관련된 맛집 게시물들을 데이터베이스에서 읽어 보여주는 서비스를 개발하고 있다. 이 프로그램의 테스팅 업무를 담당하고 있는 어피치는 서비스를 오픈하기 전 각 로직에 대한 성능 측정을 수행하였는데, 제이지가 작성한 부분 중 데이터베이스에서 게시물을 가져오는 부분의 실행시간이 너무 오래 걸린다는 것을 알게 되었다. 어피치는 제이지에게 해당 로직을 개선하라고 닦달하기 시..

[Python | Level1] 비밀지도 / 2018 KAKAO BLIND RECRUITMENT

https://school.programmers.co.kr/learn/courses/30/lessons/17681 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제 설명네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 1. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다. 2. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 ..

[Python | 6603] 로또

https://www.acmicpc.net/problem/6603문제 설명독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다.로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다.예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34])집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오. 📌 시간 제한: 2초입력입력은 여러 개의..

Algorithm/Baekjoon 2025.03.11