🔺 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
🔺 코드
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
31
32
33
34
35
|
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
int answer = 0;
Map<String, Integer> map = new HashMap<>();
for (int i = 0; i < want.length; i++) {
map.put(want[i], number[i]);
}
for (int i = 0 ; i <= discount.length - 10; i++) { // 범위 안 벗어나게 (discount 길이 - 10)까지만 설정
boolean isSame = true;
Map<String, Integer> tmpMap = new HashMap<>();
for (int j = i; j < i + 10; j++) { // i ~ (i + 10)번째 원소까지 10개
tmpMap.put(discount[j], tmpMap.getOrDefault(discount[j], 0) + 1);
}
// 기준이 되는 map과 현재 생성한 tmpMap의 원소 갯수가 같은지 선형 탐색
for (int k = 0; k < want.length; k++) {
if (tmpMap.get(want[k]) != map.get(want[k])) { // 갯수가 다르면 바로 탈출
isSame = false;
break;
}
}
// 같은 Key 값에 대한 Value 값이 두 Map에서 모두 동일한 경우, 정답 갯수 +1
if(isSame) answer++;
}
return answer;
}
}
|
cs |
🧩 해결 아이디어
• Map 사용
- Map<want 배열의 항목, number 배열에서 해당 항목 갯수>로 받게끔 Map<String, Integer>로 설정한다.
- discount 배열에서 10개의 항목을 연달아 받을 시작 인덱스를 설정한다. (0 ~ discount 배열의 길이 - 10 + 1번째 원소까지)
ㄴ시작 ~ 시작 인덱스 + 10번째까지 10일 간 항목을 보며, tmpMap<항목명, 살 수 있는 갯수>을 채운다
ㄴ 만약 현재 tmpMap에서 해당 항목의 갯수가 map에서의 항목 갯수와 다르다면 바로 반복문 탈출 (같은 상태로 쭉 진행되면 정답 + 1)
🔺 다른 풀이들
- 두 Map 간 Key에 따른 Value 값 비교할 때 향상형 for문 사용하셨다.
for(String key : map.keySet() {}
[프로그래머스] 할인 행사 (Java)
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방
maicoding.tistory.com
- List를 활용하셨다.
[Java/자바] 프로그래머스 Lv2 - 할인 행사
문제 설명 XYZ 마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합니다. XYZ 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 합니다. 할인하는 제품은 하루에 하나씩
hstory0208.tistory.com
💬 느낀 점
이것이 레벨 2...?
나 맵 문제 좋아하는데 어렵다기보다는 간만에 힐링됐다(?)
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V | 240213 |
(+ 240213 2회독)
23분 소요...
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
31
32
33
|
import java.util.*;
class Solution {
public int solution(String[] want, int[] number, String[] discount) {
Map<String, Integer> map = new HashMap<>();
for(int i = 0 ; i < want.length ; i++) {
map.put(want[i], number[i]);
}
int answer = 0;
for(int i = 0 ; i <= discount.length - 10 ; i++) { // 🔔 범위 등호 조심!!
Map<String, Integer> tmpMap = new HashMap<>();
for(int j = i ; j < i + 10 && j < discount.length ; j++) { // 제품 10개 확인
tmpMap.put(discount[j], tmpMap.getOrDefault(discount[j], 0) + 1);
}
boolean isSame = true;
for(String w : want) {
if(map.get(w) > tmpMap.getOrDefault(w, 0)) { // 두 Map에서 제품의 갯수가 다르다면 탈출
isSame = false;
break;
}
}
if(isSame) answer++;
}
return answer;
}
}
|
cs |
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Lv. 0] 5명씩 (JAVA) (0) | 2023.09.24 |
---|---|
[프로그래머스/Lv. 2] 뒤에 있는 큰 수 찾기 (JAVA) (0) | 2023.09.24 |
[프로그래머스/Lv. 2] 모음사전 (JAVA) (0) | 2023.09.18 |
[프로그래머스/Lv. 2] 이모티콘 할인행사 (JAVA) (0) | 2023.09.14 |
[프로그래머스/Lv. 2] 연속 부분 수열 합의 개수 (JAVA) (0) | 2023.09.14 |