Skip to content

[권혁준-12주차 알고리즘 스터디] #60

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 7 commits into
base: main
Choose a base branch
from
Open

Conversation

oncsr
Copy link
Contributor

@oncsr oncsr commented Apr 11, 2025

🚀 싸피 15반 알고리즘 스터디 12주차 [권혁준]

📌 문제 풀이 개요

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

✅ 문제 해결 여부

  • 틱택토
  • 미친 로봇
  • 입국심사
  • 호석이 두 마리 치킨
  • 양팔저울

  • 소트 게임
  • 행렬 곱셈 순서
  • 최대공약수 하나 빼기

💡 풀이 방법

문제 1: 틱택토

문제 난이도

Gold 5

문제 유형

  • case work

접근 방식 및 풀이

크게는 세 가지 경우로 나눴습니다.

X의 개수와 O의 개수

(X의 개수) - (O의 개수) 가 0 혹은 1이어야만 valid입니다.

대각 승리

대각 승리는 반드시 X만 승리하거나, O만 승리하거나, 둘 다 승리하지 못하는 경우 뿐입니다.
만약 X가 이겼다면, X의 개수가 O의 개수보다 많아야 valid입니다.
만약 O가 이겼다면, X의 개수와 O의 개수가 같아야 valid입니다.

가로,세로 승리

X와 O 둘 모두 가로 혹은 세로가 완성된 경우는 당연히 invalid입니다.
반대로, 둘 다 완성되지 못한 경우에는 게임판이 꽉 차지 않았다면 invalid입니다.
그 외의 경우에는 대각 승리를 판별할 때처럼 똑같이 개수를 비교해주었습니다.


문제 2: 미친 로봇

문제 난이도

Gold 4

문제 유형

  • 백트래킹

접근 방식 및 풀이

(15,15)에서 시작해서 재귀적으로 인접한 칸들을 방문해나갔습니다.

칸을 옮길 때마다, 해당 방향이 나올 확률을 갱신하여 재귀 함수의 인자로 전달했습니다.

최종적으로 K칸 이동에 성공한 경우들을 전체 경우의 수로 나눠 답을 구했습니다.


문제 3: 입국심사

문제 난이도

Gold 5

문제 유형

  • 매개 변수 탐색

접근 방식 및 풀이

단순하게, 제한 시간을 고정시켜놓고 결정 문제로 변환해서 시간 기준 이분 탐색으로 해결했습니다.


문제 4: 호석이 두 마리 치킨

문제 난이도

Gold 4

문제 유형

  • 최단 경로

접근 방식 및 풀이

가중치가 모두 1로 동일해서, 모든 쌍의 최단 거리를 BFS로 구한 뒤 문제를 해결했습니다.
간선이 양방향이기 때문에, 왕복 시간은 편도 시간*2 가 성립함을 이용했습니다.


문제 5: 양팔저울

문제 난이도

Gold 3

문제 유형

  • 배낭 문제

접근 방식 및 풀이

배낭을 TreeSet으로 구현하고, 처음에 무게 0을 Set에 담아놓습니다.
이후로 추가 주어질 때마다, 배낭에는 양팔 저울 양쪽 무게의 차이를 관리합니다.

이 차이값이 곧 측정할 수 있는 무게들이 됩니다.


문제 6: 소트 게임

문제 난이도

Gold 4

문제 유형

  • TreeSet
  • BFS

접근 방식 및 풀이

순열을 String으로 바꿔서 방문 처리를 TreeSet으로 구현했습니다.
이후론 기본 BFS로 해결할 수 있었습니다.


문제 7: 행렬 곱셈 순서

문제 난이도

Gold 3

문제 유형

  • DP

접근 방식 및 풀이

dp[s][e] = s번째 행렬부터 e번째 행렬까지 곱했을 때의 최소 곱셈 횟수라고 정의하면, 아래처럼 점화식이 뽑힙니다.

i번째 행렬의 세로 크기를 A[i], 가로 크기를 B[i]라고 정의하면,
$dp[s][e] = \min_{s \le m < e}(dp[s][m] + dp[m+1][e] + A[s] \times B[m] \times B[e])$

모든 행렬을 곱해야 하므로 정답은 $dp[1][N]$이 됩니다.


문제 8: 최대공약수 하나 빼기

문제 난이도

문제 유형

접근 방식 및 풀이


Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 분기를 나눠서 판단하였지만, 대각 승리, 가로세로 승리와 같이 경우의 수를 확실하게 나눠서 구현하는 방법이 더 직관적이고 확실한 방법인 것 같습니다!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이런 case work 문제들 풀 때에는 풀기 전에 명확하게 case 정리를 해놓고 구현하는 게 좋은 것 같더라구요 ,,
읽어주셔서 감사합니다 수고 많으셨어요 !

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.

2 participants