인프런 커뮤니티 질문&답변

자르트님의 프로필 이미지
자르트

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-T

5-T

작성

·

336

0

모듈러 연산으로 축소할 수 있겠다는 생각 기가막히네요...

우선 저는 시간이 오래 걸릴거 같긴한데

R,C가 100이라 최대 10000칸이고

한칸씩 움직임을 처리한다고 가정하면

S가 최대 1000, 상어가 최대 10000마리니까

로직의 최대값이 천만이겠구나라고 생각하고

우선 무식하게 풀어봤습니다!

http://boj.kr/b4539b56a6934360aa650d00017513dc

그런데 테케와 게시판 반례를 다 넣어봐도

1%에서 틀렸다고 나와서 질문드립니다..!

제가 보통 질문을 드리면 4시간 정도는 문제에 시간을 투자하고 질문을 드리는데 그래도 요즘 너무 많은 거 같아서 죄송합니다.

항상 양질의 답변 주셔서 감사드립니다 큰돌님!

답변 2

0

자르트님의 프로필 이미지
자르트
질문자

이번 문제도 많은 시간 써주셔서 감사합니다 큰돌님!

다른 사람의 코드를 이해하고 정답에 맞게 수정하는 것 만큼 어려운 게 또 없다고 생각합니다! 항상 어려운 일 책임감 있게 해주셔서 감사합니다!!

제 코드 자체가 너무 idx 기반이라 너무 복잡해지는 것 같은데 이런 습관 고쳐보도록 수정해보겠습니다!

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 자르트님 ㅎㅎ

>>

먼저 질문 많이 하셔도 괜찮습니다.

골드 3이상은 4시간까지 고민하시는 것은 괜찮지만 그 이상은 시간낭비입니다. 4시간 까지 고민해주시고 모르시면 질문 주셔도 됩니다.

 

제가 이 코드 디버깅을 좀 해보고 반례도 몇개 넣어봤지만 잘 모르겠습니다.

그래도 코드리뷰를 드리자면요. 좀 걸리는게 2가지가 있습니다.

  1. move() 최적화 >> 어차피 이렇게 하면 시간초과 납니다.

 

2.이부분이 걸리는데요. .. 사실 애매한 감이 있긴합니다.

image

hunt는 상어를 sort를 합니다. 즉 idx가 바뀌는 것이죠.

eat은 상어의 idx를 기준으로 죽이거나 살립니다.

근데 여기서 만약 v[k].is_alive를 수정했다고 쳤을 때

해당 v가 sort가 되면 v[k]가 해당 k인지를 보장할 수 있을까요?

근데 사실 이것도 sort를 한 배열을 중심으로 다시 eat이 벌어지기 때문에 괜찮지 않나 싶습니다.

다만 좀 걸리는 코드라고 보시면 됩니다.

예를 들어 이런 코드를 예로 들 수 있습니다. 0이라는 인덱스로 참조를 하지만 다른 값이 나오게 되죠?

#include <bits/stdc++.h> 
using namespace std; 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    vector<pair<int, int>> v; 
    v.push_back({1, 2});
    v.push_back({0, 3});
    v.push_back({2, 1});
    cout << v[0].second << '\n'; // 2
    sort(v.begin(), v.end());
    cout << v[0].second << '\n';  // 3
} 

 

이것말고는 걸리는 부분을 찾지 못했습니다..

그외에 dy, dx / shark의 alive 초깃값 / 로직 등 잘 짜셨습니다.. ㅎㅎ

 

도움이 못되어서 죄송합니다.

감사합니다.

자르트님의 프로필 이미지
자르트

작성한 질문수

질문하기