해결된 질문
작성
·
75
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
보여주신 코드와 거의 비슷하게 만든 거 같은데 왜 통과가 안되는지 모르겠습니다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct A {
int t, a, h;
};
int n, att;
ll mx, ret;
A a[123459];
bool check(ll mid) {
int cur_a = att;
ll ph = mid;
for (int i = 0; i < n; i++) {
if (a[i].t == 1) {
ll cnt = a[i].h / cur_a + (a[i].a % cur_a ? 1 : 0);
ph -= (cnt - 1) * a[i].a;
if (ph <= 0) return 0;
}
else if (a[i].t == 2) {
cur_a += a[i].a;
ph = min(mid, ph + a[i].h);
}
}
return 1;
}
int main() {
cin >> n >> att;
for (int i = 0; i < n; i++) {
cin >> a[i].t >> a[i].a >> a[i].h;
}
ll l = 1; ll r = 1e18 + 4;
while (l <= r) {
ll mid = (l + r) / 2;
if (check(mid)) {
r = mid - 1;
ret = mid;
}
else {
l = mid + 1;
}
}
cout << ret;
}
답변 2
0
안녕하세요 16님 ㅎㅎ
bool check(ll mid) {
ll cur_a = att;
ll ph = mid;
for (int i = 0; i < n; i++) {
if (a[i].t == 2) {
cur_a += a[i].a;
이거 ll로 설정해주셔야 합니다. cur_a의 경우 += 을 하다보면 int 범위를 초과할 수 있습니다.
이렇게 해보시겠어요?
http://boj.kr/760f43bd1ec04487801872d8e51b7ba1
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
16wjdekdms님의 코드를 검토해 본 결과, 몇 가지 잘못된 부분이 있을 수 있어 이를 설명해 드리겠습니다. 현재 문제는 전투에서 플레이어의 체력(ph
)이 올바르게 관리되지 않는 경우가 있다는 것입니다. 이는 전투 시 체력을 계산하는 부분과 관련이 있을 수 있습니다.
a[i].t == 1
)인 경우 몬스터와의 싸움에서 필요한 라운드 수(cnt
)를 계산할 때 a[i].h / cur_a
로 몬스터를 이길 수 있는 라운드 수를 계산하고 있습니다. 그러나 a[i].h % cur_a
는 올바른 조건으로 판별되지 않습니다. 이 부분이 예상과 다르게 행동할 가능성이 있습니다. ll cnt = a[i].h / cur_a + (a[i].h % cur_a ? 1 : 0);
(a[i].h % cur_a ? 1 : 0)
부분이 필요합니다.체력 감소 로직: 플레이어의 체력 ph
가 계산되는 부분에서 (cnt - 1) * a[i].a
를 빼는 부분이 있습니다. 이 때 ph <= 0
조건을 올바르게 설정해야 합니다. 이 부분에서의 오류는 플레이어의 최대 체력이 충분하지 않다고 잘못 평가할 위험을 가질 수 있습니다.
포션을 사용한 경우: 포션이 주어지는 경우(a[i].t == 2
)에는 공격력이 증가하고 체력이 회복됩니다. 여기서 체력 회복 부분에서의 누락된 연산이나 로직 상 혼동이 있을 수 있습니다.
아래와 같은 링크를 통해 유사한 질문에 대한 답변과 코드를 참고하실 수 있습니다. 이전 질문에서 비슷한 문제를 다룬 경우가 있으니 참고하시기 바랍니다:
코드를 디버깅하면서 위에서 언급한 “몬스터 전투 및 체력 관리 로직”을 주의 깊게 살펴보시면 문제 해결에 도움이 되실 것입니다.
질문자님의 코드가 예상과 다르게 작동하는 이유는 특히 디버깅을 통해 찾아야 할 경우가 많습니다. 디버깅 도구를 사용하여 각 단계에서 변수의 값을 추적하거나, 코드에 cout
문을 삽입하여 출력을 확인하는 방법을 추천드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.