해결된 질문
작성
·
120
·
수정됨
0
선생님 안녕하세요, 강의 잘 듣고 있습니다!
다름이 아니라, 테스트 케이스는 다 통과하는 코드인데, 사이트에서는 실패하는 코드 질문입니다!
http://boj.kr/9cc4fa8e24ac4effba423afc531c107c
코드가 많이 더러운데, '구현문제는 그래도 맞춰야지' 하는 마인드로 이 꽉 깨물고 질척이게 한번 작성해봤습니다.
그래도 가장 보기 싫은게 남이 짠 더러운 코드라서, 아래에 코드 관련해서 정보 달아두겠습니다.
시간 컨테이너 : arr은 arr[][0]에는 득점 팀을, arr[][1]에는 분, arr[][2]에는 초를 담았습니다.
전반적으로 정수로 받고->연산하고->스트링으로 바꾼 후 포멧팅 했습니다.
관련 변수로는 arr[][1 & 2], one_t[1 & 2] (1팀 분 초) / two_t[],
정수 타입 연산저장 one_t[1 & 2]<-> string o1 & o2,
two_t[1&2] <-> string t1 & t2 와 맵핑됩니다.
로직 :
~28 line : 입력 받아서, 컨테이너에 알맞은 자료형으로 넣었습니다.
~39 line : winner[]에 summation을 넣었습니다.
i째 로그상황에 1팀이 이기면 winner[i] < 0, 동점이면 0, 2팀이 이기면 >0 입니다.
~78 line : 각 컨테이너를 index 0부터 n-1까지 순회하며, 어느팀이 이기면 비기는 인덱스를 찾을때까지 while loop를 순회합니다. (for loop의 i와 while loop의 i는 같은 스코프라 실행문 실행 후, while문에 의해 증가한 i부터 다시 for loop 조건문 돈다고 봤습니다)
1팀이 이기고, 미래에 2팀이 이기기 위해서는 중간에 꼭 비기는 경우가 존재해야만 하는(사잇값정리)생각에 근거했습니다. a1&2(after time 분&초)와 b1&2(before time 분&초)
차를 이용해서 연산했습니다.
만약, n-1까지 순회를 했는데도 winner[n-1]이 0이 아니라는 의미는, 위에서 말한 근거에 의해, 계속 한 팀이 끝까지 이기는 상황이라고 판단해서, 48 , 0과 b1 & 2차를 더해줬습니다.
flag로 두 케이스 다 연산하지 않도록 막아뒀습니다.
~86 line : 음의 초 맞춰줬습니다
~ : 포멧팅입니다.
답변 2
1
안녕하세요 ㅎㅎ
코드도 열심히 짜셨구 제게 질문주실 때 설명도 많이 하신점 너무나도 좋습니다. ㅎㅎ
반례는 다음과 같습니다.
8
1 00:00
1 00:40
2 00:50
2 00:59
2 01:50
1 01:59
1 02:00
2 02:59
답
01:58
00:09
수강생님 코드 :
00:118
00:09
제 생각에는 먼저 이 while루프를 지우면 어떨까 생각이 듭니다. 이 부분은 특정 팀이 이기고 있는 시간 구간을 계산하기 위한 코드인것 같은데 불필요합니다.
코드를 해석하면 이렇게 되는 것 같은데요
winner[i] < 0: 1팀이기는 시간.
int b1 = arr[i][1]; int b2 = arr[i][2]; -> 분, 초저장
while (winner[i] != 0): -> 이기고 있는 구간의 끝까지 반복. 즉, winner[i]가 0이 될 때까지(경기 중 점수가 다시 동점이 될 때까지) 반복.
그냥 while루프 없이 1팀이 이기고 있으면 -> one_t에 더하고 -> 마지막 득점에서 48분까지의 시간을 계산하면 되지 않을까요?
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다.
ghtkdrla321님의 질문과 관련하여, 유사한 케이스의 질문 및 해결 방법을 찾았습니다. 이전에 다른 수강생이 제기한 질문 또한 경기 스코어 관리와 관련된 로직을 구현하는 과정에서 문제에 부딪혔고, 해당 질문에서는 고유한 로직으로 접근하되 몇몇 로직에서 오류를 찾는 데 도움을 받았습니다.
해당 문제를 해결한 지식공유자의 답변을 추천해드립니다:
이 답변은 경기의 경과 시간을 관리하고 승부의 결과를 연산하는 과정에서 특정 시점에서의 로직 처리가 정확한지에 대한 검증 방법을 제시합니다. 특히, 경기 경과 시간을 따로 클래스로 관리하는 접근 방식과 이를 통해 승리한 팀의 누적 시간을 계산하는 방법에서 착안하여 ghtkdrla321님의 문제를 해결하는 데 유용한 힌트를 얻을 수 있을 것입니다.
해당 답변에서는 입력된 득점 기록을 바탕으로 승리 중인 팀의 누적 시간을 계산하는 과정에서의 오류를 찾는 데 중점을 두고, 구체적인 반례를 제시하여 문제점을 파악하고 있습니다. 이러한 접근 방식은 ghtkdrla321님의 코드에서 발생할 수 있는 예외 케이스나 로직 처리 방식에 대한 이해를 돕고, 유사한 오류를 정정할 수 있는 기회를 제공할 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
반례를 보고, 분 초 변환과정에서 초가 -가되는 경우만 고려하고, 60이 넘어가는 경우는 고려하지 않았다는걸 발견하고, 해당 경우도 추가하니 통과했습니다!
분 초 아래단위 통일, formatter등 체화시킬만한 좋은 전략도 많은 도움이 됐습니다. 감사합니다!!