| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 씨샵
- Java
- 스프링부트
- WPF
- Spring Boot
- 일반화
- 코딩테스트
- 1931번
- 쿼리
- level2
- 자바
- level3
- Python
- WSL
- level4
- springboot
- programmers
- 닫기버튼
- 운전면허
- SQL
- delegate
- 3일컷
- 코테
- 프로그래머스
- MVVM
- 보통2종
- 백준
- MySQL
- JPA
- c#
- Today
- Total
욱꾸미의 주꾸미 발
[코딩테스트] 프로그래머스 - 할인 행사(Java, Level2) 본문
안녕하세요~
오늘볼 문제는 바로 '할인 행사'라는 문제입니다.
다행히 제 혼자 힘으로 풀 수 있었던 문제입니다.
효율성은 좋지 않은듯 하지만 풀었다는것에 감사하며 코드 올립니다.
코드를 만나기전에 문제를 만나보시죠.
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당문제입니다.
코드를 보여드리고 제가 생각한 로직을 적어볼까합니다.
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
int length=0;
Map<String, Integer> wantmap=new HashMap<>();
List<String> disList=new ArrayList<>();
//want와 number를 조합해 hashmap 만들어주기
for(int i=0;i<number.length;i++)
wantmap.put(want[i],number[i]);
for(int i=0;i<10;i++)
disList.add(discount[i]);
for(int i=10;i<=discount.length;i++)
{
boolean checker=true;
for(String key:wantmap.keySet())
{
int compare1=wantmap.get(key);
int compare2=Collections.frequency(disList,key);
if(compare1>compare2)
{
checker=false;
break;
}
}
if(checker==true)
answer++;
if(i==discount.length)
break;
disList.remove(0);
disList.add(discount[i]);
}
return answer;
}
}
① 먼저 HashMap을 통해 필요한 물품과 수량을 정리했습니다. hashmap의 getOrDefault는 정말 편리하네요
② 문제에서 나오듯 10일동안 회원유지가 됩니다. 그렇기에 먼저10개의 리스트를 받고 0번째를 빼고 다음 리스트의 물품을 넣어 기존에 만든 hashmap과 수량비교를 해볼 예정입니다.
③ 비교하는 로직입니다. 먼저10개의 품목을 넣어놨기에 비교 후 0번째 요소제거, 그리고 새로운 요소 추가순서의 로직으로 시작했습니다. 이런식으로하면 단점으로 마지막 요소가 추가만되고 비교를하지 않아 한번 더 돌되 비교까지만 하고 종료하도록 만들었습니다.
④ 그리고 hash key를 반복문을 통해 돌면서 hash에 저장한 수량과 list에 저장된 특정 물품의 수량을 비교합니다. Collections.frequency라는 문법을 처음 사용해봤는데 신기하네요~ 알아둬야겠습니다.
⑤ 만약하나라도 수량이 적다면 회원가입을 할 이유가 없기에 바로 break로 종료시킵니다.
이상으로 오늘의 코딩테스트 문제 마무리하겠습니다.
날씨가 점점추워지네요. 모두 감기조심하시길 바랍니다. :D
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [코딩테스트] 프로그래머스 - 소수 찾기(Java, Level2) (0) | 2022.12.03 |
|---|---|
| [코딩테스트] 프로그래머스 - 숫자 게임(Java, Level3) (0) | 2022.12.03 |
| [코딩테스트] 프로그래머스 - 베스트앨범(Java, Level3) (0) | 2022.11.19 |
| [코딩테스트] 프로그래머스 - 조건별로 분류하여 주문상태 출력하기(MySQL, Level3) (0) | 2022.11.19 |
| [코딩테스트] 프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력하기(MySQL, Level3) (0) | 2022.11.19 |