Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 반복문
- 백준 javascript
- 월간코드챌린지
- 리눅스
- 코테
- Memoir
- 백준 java
- 스프링 컨테이너
- 리눅스마스터 3과목
- map
- 카카오
- 스프링 빈
- 리눅스마스터 1급 정리
- 자바스크립트 코딩의 기술
- 리눅스마스터1급
- JavaScript
- 프로그래머스
- Java
- Linux
- 코딩테스트
- 개발자 회고록
- java 백준 1차원 배열
- toCharArray
- Kotlin
- 고잉버스
- 문자열
- 자바
- GoingBus
- 명령어
- 연습문제
Archives
- Today
- Total
hoon's bLog
[Java] 프로그래머스 로또의 최고 순위와 최저순위 자바 본문
반응형
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/77484
[나의 풀이]
public class Solution20 {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int[2];
int winCnt = 0; //당첨번호 개수 체크
int _0cnt = 0; //0개수 체크
int sum = 0;
for (int i=0; i<win_nums.length; i++) {
if(lottos[i] == 0){
_0cnt++;
}
for(int j=0; j<lottos.length ; j++) {
if(win_nums[i] == lottos[j]){
winCnt++;
}
}
}
sum = winCnt + _0cnt;
answer[0] = rankChk(sum);
answer[1] = rankChk(winCnt);
return answer;
}
//순위 계산을 위한 메서드를 따로 선언
public int rankChk(int no) {
switch (no){
case 6: return 1;
case 5: return 2;
case 4: return 3;
case 3: return 4;
case 2: return 5;
default: return 6;
}
}
}
[다른 사람의 풀이-1]
public class Solution{
public int[] solution(int[] lottos, int[] winNums) {
return LongStream.of(
(lottos.length + 1) - Arrays.stream(lottos).filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l) || l == 0).count(),
(lottos.length + 1) - Arrays.stream(lottos).filter(l -> Arrays.stream(winNums).anyMatch(w -> w == l)).count()
).mapToInt(op -> (int) (op > 6 ? op - 1 : op))
.toArray();
}
}
[다른 사람의 풀이-2]
public int[] solution(int[] lottos, int[] win_nums) {
Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
int zeroCount = 0;
for(int lotto : lottos) {
if(lotto == 0) {
zeroCount++;
continue;
}
map.put(lotto, true);
}
int sameCount = 0;
//map의 해당 key값이 존재하면 true return하며 당첨번호 변수 count up!
for(int winNum : win_nums) {
if(map.containsKey(winNum)) sameCount++;
}
//당첨 개수를 차감해서 순위 setting
int maxRank = 7 - (sameCount + zeroCount);
int minRank = 7 - sameCount;
if(maxRank > 6) maxRank = 6;
if(minRank > 6) minRank = 6;
return new int[] {maxRank, minRank};
}
[정리]
- 배열과 반복문을 통해 데이터 처리하는 것이 관건
- Stream은 볼 때마다 놀랍지만, 성능은 역시 최악.... Stream은 그저 낭만 있는 소스 정도ㅎㅎㅎ
개인 피셜 난이도 : ★☆☆☆☆
소스 코딩만큼 어려운 마무리 멘트...
난이도가 그렇게 어렵지 않을 때는 난감쓰....
푸는 방식도 완전 새롭게 다른 것이 아니면 더더욱 난감쓰ㅋㅋㅋㅋㅋ
끝!
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 2016년 자바 (0) | 2022.08.04 |
---|---|
[Java] 프로그래머스 신고 결과 받기 자바 (0) | 2022.08.02 |
[Java] 프로그래머스 신규아이디 추천 자바 (0) | 2022.07.05 |
Java 프로그래머스 실패율 자바 (0) | 2022.07.01 |
Java 프로그래머스 다트게임 자바 (0) | 2022.06.23 |