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
- while과 two-pointer
- 스프링환경설정
- 스프링뼈대
- 베주계수
- StringBuilder
- 최대공약수
- 유클리드호제법
- 래퍼타입
- islowercase()
- 동일성과 동등성
- string
- addDoc
- 스프링
- 자바 최소공배수
- replaceAll()
- 자바 최대공약수
- ineer join
- 최대공약수와 최소공배수
- sql 데이터형 변환
- 최소공배수
- Git사용법
- 자바 스트링
- isuppercase()
- string과 stringbuilder
- 프로그래머스 레벨1
- toLowerCase()
- 모던자바
- 자바 유클리드
- stringbuilder의 reverse()
- git 컨벤션
Archives
- Today
- Total
주노 님의 블로그
프로그래머스 - 로또의 최고순위와 최저순위 (java) 본문
금요일 밤
어떤 지나가던 나그네님이 61번 로또의 최고순위와 최저순위를 구하는 문제를 어려워 하셨다 동적할당?? 으로 푼다는데
그래서 튜터님 잠깐 기다리는동안 풀어봤다
민우 동생은 왜 지웠노 이걸
위 내용만 보면 된다.
다른 번호는 나중에 계산하고. 최고순위일때는 지워진 숫자를 모두 당첨
최저순위일때는 지워진 숫자를 모두 꽝 으로 보면되는것이다
arraylist를 쓸 이유가 없는디..?
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
int[] answer = new int [2];
int countMax = 0;
int countMin = 0;
for(int i=0;i<lottos.length;i++)
{
if(lottos[i]==0)
{
countMax++;
}
else
{
for(int j=0; j<win_nums.length; j++)
{
if(lottos[i] == win_nums[j])
{
countMax++;
countMin++;
}
}
}
}
answer[0]=rank(countMax);
answer[1]=rank(countMin);
return answer;
}
private int rank(int count)
{
switch (count)
{
case 6:
return 1;
case 5 :
return 2;
case 4 :
return 3;
case 3 :
return 4;
case 2 :
return 5;
default:
return 6;
}
}
}
카운트를 두개를 둔다 하나는 최고순위, 하나는 최저순위
구현한 코드이다
만약 0(지워진 상태)라면 그건 최고순위에 카운터해준다 (무조건 정답)
그다음 반복문으로
로또 i가 정답 j랑 같다면
둘다 플러스를 해준다. (나머지 지워지지않은 값은 그대로 카운트해야하니까)
그리고 rank 메서드를 만들어 체크를 해준다
뭔가 for이 두개들어가면 일단 비효율적이진 않을까 고민하게된다
import java.util.HashSet;
import java.util.Set;
class Solution {
public int[] solution(int[] lottos, int[] win_nums) {
Set<Integer> winNumsSet = new HashSet<>();
//당첨 번호를 해시셋에 넣는다
for (int win_num : win_nums) {
winNumsSet.add(win_num);
}
int countMax = 0;
int countMin = 0;
for (int lotto : lottos) {
if (lotto == 0) {
countMax++;
} else if (winNumsSet.contains(lotto)) {
countMax++;
countMin++;
}
}
int[] answer = new int[2];
answer[0] = rank(countMax);
answer[1] = rank(countMin);
return answer;
}
private int rank(int count) {
switch (count) {
case 6: return 1;
case 5: return 2;
case 4: return 3;
case 3: return 4;
case 2: return 5;
default: return 6;
}
}
}
챗지피티한테 물어봤다
내 코드는 해당 번호가 당첨 번호와 매칭시키기 위해서 for문을 한번 더썼지만
set클래스에서는 contains메서드를 이용하면 굳이 돌지않아도 바로 찾을수 있다는것..
물론 set은 순서를 보장하지않기때문에 조심해야한다
'공부 > 코딩테스트(java)' 카테고리의 다른 글
String, StringBuilder을 사용한 간단한 코딩테스트 문제풀이 (0) | 2024.08.19 |
---|---|
프로그래머스 - 두 개 뽑아서 더하기 (중복을 허용하지 않는 Set) (0) | 2024.08.09 |
프로그래머스 - 최대공약수 와 최소공배수 (유클리드 호제법) (0) | 2024.07.28 |