실패율

최진훈·2022년 2월 15일
0

programmers

목록 보기
36/73

1 스테이지부터 각 스테이지에 머무르는 사람들을 구하고 남은 사람들로 나누어서 실패율을 구하고 정렬해서 인덱스를 뽑으면 끝...? 일단 그렇게 어려워 보이지 않으니까 일단 해보자.

  1. 머무르는 유저를 담을 변수 user, 그 변수를 담을 배열 lose, 남은 인원을 계산 할 변수length, 실패율을 담을 배열 fail을 선언한다.
  2. 반복문으로 stages의 원소들을 차례로 꺼내어 해당 스테이지와 일치하면 user를 1씩 더해준다.
  3. 한 스테이지에 대한 비교가 끝나면 userlose에 순서대로 넣어주고 0으로 초기화 한다.
  4. 반복문을 이용해 lose의 원소를 length로 나누어 실패율을 구해 fail에 순서대로 담는다.
  5. fail에 담긴 최대값을 구하여 그 인덱스를 answer에 저장한다.
  6. fail에서 최대값을 제거하고 다음 최댓값을 구한다.
  7. (5-6)을 반복한다.

일단 이 정도로 구상을 하고 코드를 짜보면서 조금씩 수정하자.

레고레고

택도 없다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 일단 배열에 값들을 담고 그것들의 인덱스로 결과를 내려고 했던 생각, 최대값을 제거하면서 다음 최대값을 구하려 했던 생각 전부 엉망이다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
심지어 최대값을 제거하면서 인덱스를 가져오려고 했더니 전체 배열의 길이가 줄어드므로 인덱스가 1씩 줄어든다 ㅋㅋㅋㅋㅋㅋㅋ 생각해보니 왜 배열로 구상을 한 것 일까 생각이 든다. 키와 값의 쌍으로 이루어진 map으로 해결하면 될 것을... map을 좀 더 공부하고 오자!


source : https://math-coding.tistory.com/229

후...

  1. 실패율을 담을 맵 fail, 머무르는 사람들을 담을 맵 lose, 그 맵에 담길 사람들을 계산 할 때 사용할 변수 user, 남은 인원을 담을 변수 length를 선언해준다.
  2. 실패율을 구하기까지는 위와 동일하다.
  3. failsortedByDescending()해주기 위해 toList()를 이용하여 형변환을 해준다.
  4. sortedByDescending()을 이용하여 각 원소의 두번째 값을 기준으로 정렬을 하여 새로운 리스트 new에 담아준다.
  5. new의 원소들을 하나씩 빼서 해당 원소의 첫번째 값(즉, 인덱스이자 스테이지)에 +1을 하여 answer에 넣는다.

다시 레고레고

맨 처음 코드를 짜고 테스트를 하다가 오류가 많이 났는데, 질문하기에서 찾아보니 실패율을 계산할때 머무르는 인원이 0일때 즉, 0을 뭔가로 나누면 오류가 생겨서 실패일거라는 글을 봤다.
올려준 예시로 값을 찍어보니 저런 상황이 오면 값이 0이 아닌 NaN으로 저장된다.

source : https://pancake.coffee/2018/03/25/double%ED%98%95%EC%9D%98-%EA%B0%92%EC%9D%84-%EB%8B%A4%EB%A3%B0-%EB%95%8C-%EC%A3%BC%EC%9D%98%ED%95%A0-%EC%A0%90-nan/

따라서 실패율을 계산할 때 isNaN()메소드를 이용하여 계산한 값이 NaN이면 0.0을 넣어주는 예외 처리를 해주었다.
그결과


겨우겨우 통과 ㅠ.ㅠ

profile
레고레고

0개의 댓글