250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 코테
- vscode
- 오블완
- Git
- 알고리즘
- ubuntu
- 스프링부트
- 개발공부
- TypeScript
- Linux
- 자바
- React
- 개발자
- 우분투
- programmers
- EC2
- error
- Java
- 개발
- 코딩
- Tistory
- AWS
- 프로그래머스
- SpringBoot
- 둔산동맛집
- CodingTest
- 리눅스
- 티스토리
- 코딩테스트
- 티스토리챌린지
Archives
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 코테
- vscode
- 오블완
- Git
- 알고리즘
- ubuntu
- 스프링부트
- 개발공부
- TypeScript
- Linux
- 자바
- React
- 개발자
- 우분투
- programmers
- EC2
- error
- Java
- 개발
- 코딩
- Tistory
- AWS
- 프로그래머스
- SpringBoot
- 둔산동맛집
- CodingTest
- 리눅스
- 티스토리
- 코딩테스트
- 티스토리챌린지
Archives
- Today
- Total
개발자가 된 감자
[프로그래머스] Lv.1 실패율 (2019 KAKAO BLIND RECRUITMENT) 본문
728x90
전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return 하기
실패율 : 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수
1. 각 변수 초기화
int[] answer = new int[N]; // 실패율 높은 순서대로 스테이지의 데이터를 담을 배열
int player = stages.length; // 사용자가 멈춰있는 스테이지의 번호가 담긴 player 배열 크기로 전체 사용자 수 구하기
Double[] array = new Double[N]; // 스테이지 순서대로 실패율을 담을 배열
Map<Integer, Double> map = new HashMap<>();
2. states 배열 오름차순으로 정렬
Arrays.sort(stages);
3. 실패율 구하기
for(int i=1; i<(N+1); i++){ // 스테이지 번호는 1부터~
int cUser = 0; // 해당 스테이지에서 멈춘 사용자 수 초기화
for(int j=0; j<stages.length; j++){ // 오름차순으로 정렬된 stages에서 스테이지 번호 꺼내오기
// 해당 스테이지 번호(i)와 사용자가 클리어하지 못한 스테이지 번호(states[j])가 같을 경우 cUser 값 증가
if(i == stages[j]) ++cUser;
}
double result = 0; // 실패율을 구하기 위한 double 타입의 변수 초기화
if(cUser != 0) result = cUser/(double)player; // 클리어하지 못한 사용자가 0명이 아니라면, 실패율 계산하여 구하기
array[i-1] = result; // array 배열에 순서대로 실패율 값 담기
map.put(i, result); // Map에도 key:index, value:실패율 형태로 담기
// 전체 사용자에서 cUser 값 빼기 (해당 스테이지에서 멈춘 사용자는 다음 스테이지에 도달하지 못한 사용자이므로)
player -= cUser;
}
4. 각 스테이지별 실패율을 순서대로 담았던 array 배열을 내림차순으로 정렬
Arrays.sort(array, Collections.reverseOrder());
5. 실패율이 높은 순서대로 정렬된 array 배열에서 각 스테이지 번호를 찾기 위한 코드
/*
* 높은 순서대로 정렬한 array는 정렬했기 때문에 스테이지 번호를 알 수가 없음
* key:스테이지 번호, value:실패율 형태로 저장했던 map에서 실패율이 같은 스테이지로 번호 찾기
*/
for(int i=0; i<array.length; i++){ // array에서 실패율 꺼내오기
for(int j=1; j<N+1; j++){ // Map에서 스테이지 번호(key) 값으로 실패율 조회 하기
if(map.get(j) != null){
int result = Double.compare(map.get(j), array[i]); // 실패율 비교
if(result == 0){ // 비교 결과 두 값이 같을 경우(0) 스테이지 번호를 anwser에 담고 break.
answer[i] = j;
map.remove(j);
break;
}
}
}
}
return answer;
전체 코드
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int player = stages.length;
Double[] array = new Double[N];
Map<Integer, Double> map = new HashMap<>();
Arrays.sort(stages);
for(int i=1; i<(N+1); i++){
int cUser = 0;
for(int j=0; j<stages.length; j++){
if(i == stages[j]) ++cUser;
}
double result = 0;
if(cUser != 0) result = cUser/(double)player;
array[i-1] = result;
map.put(i, result);
player -= cUser;
}
Arrays.sort(array, Collections.reverseOrder());
for(int i=0; i<array.length; i++){
for(int j=1; j<N+1; j++){
if(map.get(j) != null){
int result = Double.compare(map.get(j), array[i]);
if(result == 0){
answer[i] = j;
map.remove(j);
break;
}
}
}
}
return answer;
}
}
728x90
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.1 완주하지 못한 선수 (1) | 2024.11.17 |
---|---|
[프로그래머스] Lv.1 과일 장수 (0) | 2024.11.16 |
[프로그래머스] Lv.1 로또의 최고 순위와 최저 순위 (0) | 2024.11.15 |
[프로그래머스] Lv.1 추억 점수 (0) | 2024.11.12 |
[프로그래머스] Lv.1 달리기 경주 (0) | 2024.11.11 |
Comments