Skip to content

[정민서-14주차 알고리즘 스터디] #24

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 50 commits into
base: minseojeong/week14
Choose a base branch
from

Conversation

minseojeong1012
Copy link
Contributor

🚀 싸피 15반 알고리즘 스터디 14주차 [정민서]

📌 문제 풀이 개요

  • 이번 PR에서는 다음 5문제의 풀이를 포함합니다.
  • 각 문제에 대한 풀이 과정과 접근 방식을 설명합니다.

✅ 문제 해결 여부

  • 문제 1
  • 문제 2
  • 문제 3
  • 문제 4
  • 문제 5

💡 풀이 방법

문제 1: 로봇 청소기

문제 난이도
골드 5

문제 유형
그래프

접근 방식 및 풀이

청소기가 왼쪽부터 탐색하고, 4방향 모두 청소할 곳이 아니라면 뒤로 후진하는 그대로 구현해서 해결했습니다.

// 네 방향 모두 청소할 수 없을 때 후진
        int back = (d + 2) % 4;
        int bx = x + dx[back];
        int by = y + dy[back];

        if (bx >= 0 && by >= 0 && bx < N && by < M) {
            if (map[bx][by] == 0) {
                clean(bx, by, d); // 방향 유지한 채 후진
            }
        }

문제 2: 양팔저울

문제 유형
dp

문제 난이도
골드 3

접근 방식 및 풀이

총 3가지 경우를 고려하는 dp를 사용했습니다.
추를 사용안할 경우 dfs(idx + 1, weight);
오른쪽에 추가한다면 dfs(idx + 1, weight + weights[idx]);
왼쪽은 dfs(idx + 1, Math.abs(weight - weights[idx]));

이미 방문하면 리턴 하는 방식으로 dfs 진행했습니

        dfs(idx + 1, weight);                         
        dfs(idx + 1, weight + weights[idx]);      
        dfs(idx + 1, Math.abs(weight - weights[idx])); 

문제 3: 제곱수의 합

문제 유형
dp

문제 난이도
실버 3

접근 방식 및 풀이

최소값을 찾는 방식으로 dp 활용했습니다.

        for (int i = 1; i <= N; i++) {
            dp[i] = i; // 최악의 경우 (1^2을 i번 더하는 경우)
            for (int j = 1; j * j <= i; j++) {
                dp[i] = Math.min(dp[i], dp[i - j * j] + 1);
            }
        }

문제 4: 타일 채우기

문제 유형
dp

문제 난이도
골드 4

접근 방식 및 풀이
n이 홀수 일 경우 -> 0 으로 종료
짝수일 경우 dp

아무것도 없는 2x0은 경우의 수 1가지
2x2는 총 3가지 방법
그다음 부터는 마지막에 2칸을 추가하는 방식은 항상 3가지

        int[] dp = new int[n + 1];
        dp[0] = 1;
        dp[2] = 3;
        
        for (int i = 4; i <= n; i += 2) {
            dp[i] = dp[i - 2] * 3;
            for (int j = i - 4; j >= 0; j -= 2) {
                dp[i] += dp[j] * 2;
            }
        }


문제 5: 연구소 3

문제 유형

문제 난이도

접근 방식 및 풀이



Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant