lomotos10   4년 전

입력에는 출력 쿼리가 6개밖에 없는데 출력 예제는 8줄이네요.

노래를 정지했다가 재생하면 정지했던 곳에서 시작한다는 사실도 알려주지 않고..

출력도 문제에서는 지수를 출력한다 했는데 예제에서는 노래명을 출력하네요.

이 밖에도 자잘하게 설명이 혼란스럽게 되어 있는 부분들까지 합쳐져서 문제 퀄리티에 매우 문제가 있다고 생각합니다.

빠르게 수정 부탁드립니다.

pichulia   4년 전

"치삼이는 치삼지수가 일정 수치 S 이상이 되면 자동으로 플레이리스트에서 제거하고 제거한 노래의 제목을 출력하는 프로그램을 만들고자 한다."


사실 이 문구때문에 어느정도 설명이 가능하긴 합니다... 가능하긴 한데.....

사실 저것도 "플레이리스트에서 제거하는 시점"에 대한 설명이 부족하긴 합니다.

노래가 다 끝난 다음에 제거되는건지, 노래 열심히 재생되다가 S 이상이 되는 순간 제거하는건지...

그렇다면 노래를 듣는 시간은 실수가 될 수 있는건지, 무조건 정수가 될 수 있는지 등등....

그리고 노래를 정지했다가 재생하면 정지했던 곳에서 시작한다는건

"  새로운 노래가 추가된 후 L을 눌러 노래를 들으면 그 노래부터 재생된다 "

라는 문구를 역으로 생각해서 유추할 수 있긴 합니다...


근데 이 모든걸 암튼 '설명'을 통해서가 아닌 '유추'하도록 만든건 아주아주 큰 문제여서 전체적으로 손을 봐야할거같긴 합니다;


적어도 예제 입력에서 각 명령어에 대한 설명이라도 있었으면 그나마 나은 상황이지 않았을까 싶습니다..

pichulia   4년 전

...제가 유추했던 모든 조건이 틀렸습니다. 이 문제에는 제가 알아내지 못한 뭔가 어마어마한 조건이 숨겨져있는 것 같습니다.

제가 테스트한 상황들은 다음과 같습니다.

  1. 치삼지수가 S를 넘기는 순간 바로 곡을 삭제하고 다음 곡을 재생 or 노래 재생이 끝난 뒤에 치삼지수가 S를 넘기게 됐다면 삭제
  2. 재생 중이던 곡이 삭제된 경우 바로 다음 곡을 재생 or 재생 중이던 곡이 삭제된 경우 처음부터 다시 재생
  3. 노래를 끝까지 재생한 뒤 L을 호출했을 때 처음부터 다시 재생하는 경우 or 노래를 끝까지 재생했으면 L 호출을 무시하기 or 노래를 끝까지 재생했으면 L 호출시 -1 출력하기 (정황상 2번째 경우가 맞을 것 같습니다만... 이런 디스크립션 오류가 많은 문제는 지문에 적혀있는 조건마저도 의심하고 봐야합니다)
  4. 이미 삭제된 곡에 대해서 치삼지수를 호출했을 시 -1 출력 or 이미 삭제된 곡에 대해서 가장 마지막 치삼지수를 출력하기 (이 조건을 넣은 이유는... 이미 삭제된 곡에 대한 처리를 깜빡하고 안했길래 이걸 추가하니까 기존에는 37%정도까지 채점이 진행되던게 갑자기 채점 돌리자마자 틀려버렸기 때문입니다. 뭐, 이건 BOJ의 채점 정책에 의한걸수도 있지만...)

채점하다가 실수로 빼먹은 부분이 있을수도 있긴한데...

으 이거 계속 작업하다보면 정신이 혼미해지고 자괴감들고 괴롭네요..

jh05013   4년 전

gjdms611   4년 전

문제 스크립트에 설명이 명확하지 않은 점 우선 사과 드립니다.

1. 치삼지수가 S를 넘는지를 판단하는 시점은 해당 노래의 재생이 끝난 직후입니다. 노래를 듣다가 시간이 다 되어 중간에 끊긴 경우 또한 포함됩니다.
2. 치삼지수가 S를 넘긴 노래를 삭제하며 곡 제목을 출력하는 시점은 1에서 판단할 때 같이 처리해주었습니다.
3. 2에 의해 예제에서 치삼지수를 출력하는 쿼리에서는 치삼지수를 출력합니다.
4. 노래를 듣는 시간 L과 노래의 길이는 모두 정수로 주어집니다.
5. 노래를 재생하다가 중간에 멈췄을 경우 해당 지점에서 멈춰있다가 다시 L이 입력될 경우 그 지점에서부터 시작됩니다.
6. L쿼리가 입력되었지만 더이상 들을 곡이 없을 경우 해당 쿼리는 무시됩니다.
저는 이것에 대해 연산을 수행하긴 했으나 더이상 들은 곡은 없기 때문에 멈추는 것이므로 -1을 출력할 필요는 없다고 판단하여 출제했습니다. 이에 관해 정확히 명시하지 않았던 점에 대해서는 분명한 잘못입니다. 다시 한 번 사과드립니다.
7. 이미 삭제된 곡은 더이상 존재하지 않기 때문에 -1을 출력하는 것이 맞습니다.
이후 질문에 대해서는 해당 질문글에서 이어서 답변하도록 하겠습니다.

pichulia   4년 전

3.은 뭔소린지 모르겠지만 1.번상황에 대해선 깜빡하고 오늘 테스트를 안해봤네요. 있다가 퇴근해서 마저 시험해보겠습니다.ㅋㅋ


중요한 질문을 2가지 하겠습니다

1) 치삼지수를 계산하는데 사용되는 '들은 시간'에 대한 설명이 필요합니다. 이에 대해선 https://www.acmicpc.net/board/... 이 게시글에 좀 더 장황하게 설명한게 있으니..  입맛에 맞는걸 골라서 대답해주시면 됩니다ㅋㅋㅋ

2) 치삼지수는 곡마다 누적되는 값인지 아님 곡 재생시 초기화되는 값인지 필요합니다.

어제 문제를 풀 때 당시엔 당연히 곡 재생할 때마다 치삼지수가 계산되고, 이 누적된 치삼지수의 합이 S를 넘기면 터지는거라고 이해했었는데 문제 지문을 형태소단위로 분석하다보니 치삼지수가 곡마다 누적된다는 증거가 없었습니다. 이 여부에 따라서 최적화의 방향성이 크게 달라지니 중요할 수 있는 정보입니다ㅇㅜㄴ


괜히 끈질긴 아저씨한테 걸려서 고생이 많으십니다ㅠ 좀만 더 힌트를...

gjdms611   4년 전

3.은 질문하신 분이 치삼지수를 출력하는 쿼리에 대해 제목을 출력하신다고 질문하셔서 답변한 내용입니다.

1) '들은 시간'이라 함은 L쿼리가 입력되어 노래를 듣는 동안, 해당 곡을 들은 시간입니다.

예를 들어 주어진 플레이리스트가 다음과 같고 , S = 5라면

pizza 3
papercut 5
joshua 2
L 2
P blue 4
L 6

이 입력될 경우,

  1. L 2를 수행하며 pizza의 치삼지수가 1 * 2 = 2로 업데이트 됩니다.
  2. P blue 4를 수행하며 플레이리스트가 
blue 4
pizza 3
papercut 5
joshua 2
로 업데이트 됩니다.L 6을 수행하며

blue : 1 * 4 = 4

pizza : 2 + 2 * 1 = 4

로 업데이트됩니다.

이해에 도움이 되셨기를 바랍니다.


2) 1)에서 설명한 바와 같이 치삼지수는 누적되어 계산됩니다.

gjdms611   4년 전

앗 설명에서 잘못 된 부분이 있어 수정합니다ㅠㅠ

3. L 6을 수행하면서 

blue : 1 * 4 = 4

pizza : 2 + 2 * 2 = 6

로 업데이트됩니다.

따라서 pizza의 치삼지수가 S인 5 이상이 되어 삭제됩니다.

이상입니다.

댓글을 작성하려면 로그인해야 합니다.