6-B 질문있습니다.
304
작성한 질문수 14
강사님의 로직이 잘 이해가 가지 않습니다.
처음 문제를 풀 때 모든 블루레이를 사용해야 한다 고 생각해서 계속 오답이 나왔었는데요, 그 부분을 지우고 (cnt가 M과 같다는 조건문을 지우고) mid의 최소를 찾아 이분탐색 시켰더니 결국 통과는 했습니다.
그리고 강사님의 코드를 참고했는데, 동작방식이 잘 이해가 가지 않았습니다. 다음은 강사님 코드의 로직을 이해해보고 제 방식으로 수정해본 코드입니다.
bool check(int mid) {
if (mx > mid) return false;
int temp = mid;
int cnt = 0;
for (int i = 0; i < n; i++) {
if (mid - a[i] == 0)
{
++cnt;
mid = temp;
continue;
}
else if (mid - a[i] < 0)
{
++cnt;
mid = temp;
--i;
}
else
mid -= a[i];
}
if (mid != temp) cnt++;
return cnt <= m;
}else if (mid-a[i]<0) 의 조건문에서 i를 감소시켜서 다시 검사하게끔 하여 n+@의 순회를 합니다.
강사님은 이 부분을 최적화 하셔서 기존 14행과 같은 코드를 만드신 것 같은데요, 제가 제대로 이해한건지 (질의1)
제가 제대로 이해한게 맞다면, 처음부터 n회 순회만 하게끔 의도하셔서 코드를 작성하신건지 (처음 코드를 쓸 때부터 바로 저렇게 짜신건지) 아니면 최적화를 하다가 짜신건지 궁금합니다. (질의2)
저런 발상 자체를 해본적이 없어서 굉장히 낯선 코드를 보는 기분이었네요..
감사합니다.
답변 2
0
안녕하세요 ㅎㅎ
강사님은 이 부분을 최적화 하셔서 기존 14행과 같은 코드를 만드신 것 같은데요, 제가 제대로 이해한건지 (질의1)
>> 네 맞습니다.
한번 그림을 그려봤는데요.

일단은 새로이 생성해야 하는 경우 같은 경우 cnt++, mid = temp가 되는 것은 당연합니다. 삐져나오게 되면.. 못넣게 되니까요.
그리고 일반적인 로직은 계속해서 빼야 하기 때문에 mid - v가 됩니다.
제가 제대로 이해한게 맞다면, 처음부터 n회 순회만 하게끔 의도하셔서 코드를 작성하신건지 (처음 코드를 쓸 때부터 바로 저렇게 짜신건지) 아니면 최적화를 하다가 짜신건지 궁금합니다. (질의2)
>> 처음부터 저렇게 짰습니다. 저렇게 그림 그리면서 짠 것 같습니다.
저런 발상 자체를 해본적이 없어서 굉장히 낯선 코드를 보는 기분이었네요..
>> 이게 음수를 활용하는 부분이라 그런 것 같은데요. 음수를 만들고 해당 음수를 기반으로 새로이 만들어야 하는 로직을 만들었다고 보시면 됩니다. Maruche님처럼 음수를 만들기전 체킹해서 하는 것도 괜찮고 음수를 기반으로 하는 것도 괜찮습니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
Maruche님, 강사님의 로직에 대한 이해와 질문에 대해 상세히 설명해 주셔서 감사합니다.
질문에 대해 답변드리기 이전에, 강사님께서 제공한 원래의 코드나 기타 설명 자료가 없어 정확한 답변이 어려울 수 있음을 양해 부탁드립니다.
질의1에서 언급하신 최적화된 코드 이해 부분과 관련해서는, else if 조건 하에서 mid - a[i] < 0일 때 i를 감소시켜 이전 상태로 되돌리고 다음 반복으로 넘어가기 전에 cnt를 증가시키고 mid를 temp로 초기화하는 것은, 현재 블루레이의 크기(mid)가 현재 강의 길이(a[i])보다 작아 새로운 블루레이로 강의를 담아야 함을 의미합니다. 그리고 mid != temp 조건을 통해 남은 강의가 있다면 추가 해야 하는 블루레이 개수를 고려한 점이 맞습니다.
질의2에 대하여, 처음부터 n회 순회를 목표로 작성했는지, 아니면 초안 후 수정을 통해 최적화를 진행했는지는 강사님의 초기 의도나 코드 개발 과정을 알 수 없기 때문에 명확하게 말씀드릴 수 없습니다. 일반적으로는 코딩테스트나 알고리즘 문제 해결 시 시간복잡도를 고려하여 가능한 반복을 줄이는 방향으로 코드를 작성하려 합니다. 그러나 이것이 처음부터 의도된 것인지, 경험과 여러 번의 시도를 통해 최적화된 것인지는 과정을 알 수 없으면 추측만 가능합니다.
이 질문에 대한 구체적인 해답을 얻고 싶으시다면, 인프런의 수강 전 문의 게시판을 통해 강사님에게 직접 문의를 남기셔도 좋습니다. 해당하는 부분의 링크를 참고해주세요.
강의에 대한 추가적인 질문이나 더 필요한 정보가 있으시다면 언제든 문의해 주세요. Maruche님의 학습에 조금이나마 도움이 되셨기를 바랍니다. 감사합니다.
코딩살구클럽 가입부탁드립니다
0
27
2
코딩살구클럽 가입 요청 확인부탁드립니다
0
30
2
5-S 테스트 케이스 질문
0
34
2
코살 문제풀이 환경
0
47
2
2 - T 오큰수 문제가 있는 것 같습니다.
0
43
1
추천 추가문제들
0
43
2
프로그래머스 코테 환경 관련해서 질문드립니다.
0
45
2
해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.
0
40
2
균형 이진 트리 설명 시 높이 숫자
0
30
2
4-H 질문드립니다.
0
35
2
1-K 질문드립니다.
0
41
2
대기업 인적성 시험 질문
0
41
2
4-C 질문드립니다
0
41
2
[수학숙제 / BOJ 2870] 채점 서버 오작동
0
37
1
코테 준비 질문
0
50
1
살구클럽가입 요청드려요
0
39
2
1-I 문제 질문
0
40
2
코딩살구클럽 가입
0
57
2
AI 코딩 도구 사용 시 학습 방법 조언
0
52
2
코딩살구클럽 오류
0
61
2
코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보
0
46
1
코딩살구클럽 테스트 케이스 오류 제보
0
52
2
삼성 코딩테스트
0
65
2
틀린 이유를 못찾겠습니다
0
48
2





