거의 1년만에 OKKY 사이트에 들어가봤더니 이런 링크가 있었다.
https://okky.kr/article/1052166
그래서... 그냥 한 40분정도 나라면 어떻게 만들까 하다가 생각해봤다. 그러다 고민되는 룰이 하나 생김.
Sql에도 존재하듯 동일한 점수면 어떻게 할 것인가? 대충 100점이 2명일 때 99점이면 이건 3등으로 처리하자라고 생각함.
private static final ArrayList<ArrayList<Integer>> rankArrayList = new ArrayList<>();
private static int perfectRankCount = 0;
private static final int perfectRank = 100;
private static final int numberMaxCount = 10;
private static final int arrayRankCount = (perfectRank / numberMaxCount);
public static void main(String[] args) {
perfectRankCount = 0;
//보통은 반환값으로 받는게 더 좋긴한데. 테스트니깐 안에서 배열 초기화를 한다.
makeRankArray();
final int testRankCount = 100;
Random random = new Random();
for(int i = 0; i < testRankCount; i++) {
//0 ~ 100점
int randomRank = random.nextInt(perfectRank + 1);
rank(randomRank);
}
System.out.println("Hello World");
}
private static void makeRankArray() {
rankArrayList.clear();
for(int i = 0; i < arrayRankCount; i++) {
ArrayList<Integer> rankArray = new ArrayList<>();
for(int j = 0; j < numberMaxCount; j++) {
rankArray.add(0);
}
rankArrayList.add(rankArray);
}
}
private static int rank(int randomRank) {
int resultRank = 1;
if(perfectRank > randomRank) {
int arrayListIndex = randomRank / numberMaxCount;
int arrayIndex = randomRank - (arrayListIndex * 10);
//자신의 위치 카운트 증가
rankArrayList.get(arrayListIndex).set(arrayIndex, rankArrayList.get(arrayListIndex).get(arrayIndex) + 1);
int firstRank = 0;
//자신의 위치 카운트
for(int i = arrayIndex + 1; i < numberMaxCount; i++) {
firstRank = firstRank + rankArrayList.get(arrayListIndex).get(i);
}
//자기 상위 위치 카운트
for(int i = arrayListIndex + 1; i < rankArrayList.size(); i++) {
for(int j = 0; j < numberMaxCount; j++) {
firstRank = firstRank + rankArrayList.get(i).get(j);
}
}
resultRank = firstRank + perfectRankCount + 1;
} else {
perfectRankCount++;
}
System.out.println("점수 : " + randomRank + " 랭크 : " + resultRank);
return resultRank;
}
전역 변수로 만든건 자주 사용된다면 그냥 메모리에 상주해놓는게 이득이라고 생각했다.
만약 자주 사용되지 않는 함수라면 그냥 지역변수로 만드는게 이득
원래 코드를 짜면 다른 클래스에서 getter를 통해 가져오도록 구현해서 가독성을 더 올렸을 듯하다.
맨날 알고리즘 공부도 안하고 ㅜ.ㅜ 언어도 코틀린 + 자바 + C#을 여러개 생각하며 하니깐... 코딩 테스트도 못 한다.
'Java' 카테고리의 다른 글
자바 비밀번호 생성(금융보안원) (1) | 2022.05.10 |
---|---|
자바 프로그래머스 위클리 챌린지 8주차 (0) | 2021.10.01 |
자바 랜덤키 (0) | 2021.05.13 |
자바 Json Parser (0) | 2021.02.22 |
자바 Log Class (0) | 2021.02.22 |