일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 코틀린
- programmers
- 코딩봉사
- 공부일지
- 백준알고리즘
- 자바
- python
- 백준
- softeer
- BFS
- 스프링
- SW봉사
- 프로그래머스
- 데이터베이스
- 회고
- java
- 파이썬
- 문제풀이
- SQL
- MYSQL
- 소프티어
- 정보처리산업기사
- 시나공
- 코딩교육봉사
- 알고리즘
- C++
- CJ UNIT
- 1과목
- 백준 알고리즘
- kotlin
Archives
- Today
- Total
JIE0025
[고득점kit][해시][lv.2] 위장 - 자바(Java) 본문
728x90
프로그래머스 > 코딩테스트 연습 > 코딩테스트 고득점 Kit > 해시 > 위장
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42578?language=java
문제
✅ 풀이 과정
0. 자료구조 / 알고리즘 선택
해시맵을 이용해 Key에 해당하는 개수를 세어주면 된다.
1. 복잡도 고려
스파이가 가진 의상의 수가 1~30개이고, 문자열의 길이도 20이하여서 고려할정도의 문제가 아니다.
2. 수도코드/ 알고리즘 생각
1) 들어온 데이터를 옷의 종류에 따라 해시맵으로 만들어준다.
2) clothesHash.EntrySet으로 가져와서, 각 value (해당 옷타입의 실제 개수)로 연산한다.\
result =1 로 초기화하고, (해당 type의 개수+1)을 곱해준다 (안입는경우도 함께 고려해야함)
마지막에 아무것도 안입은 경우의수를 빼주면 정답!
✅ 내가 쓴 정답코드
import java.util.*;
class Solution {
public int solution(String[][] clothes) {
HashMap<String, Integer> clothesHash = new HashMap<>();
String type;
//01) 들어온 데이터를 옷의 종류에 따라 해시맵으로 만들어준다.
for (int i = 0; i<clothes.length; i++) {
type = clothes[i][1]; //종류
if (clothesHash.containsKey(type)){
clothesHash.put(type,clothesHash.get(type)+1);
}
else {
clothesHash.put(type,1);
}
}
//02) clothesHash.size 는 옷타입 수
// clothesHash.EntrySet으로 가져와서, 각 value (해당 옷타입의 실제 개수)로 연산한다.
int result = 1;
for( Map.Entry<String, Integer> entry : clothesHash.entrySet()) {
result *= entry.getValue()+1;
}
return result-1;
}
}
✅ 문제를 풀기 위해 새롭게 학습한 것
나는 해시테이블에 값을 추가할 때 파이썬에서 썼던 것과 비슷하게 작성했는데,
if (clothesHash.containsKey(type)){
clothesHash.put(type,clothesHash.get(type)+1);
}
else {
clothesHash.put(type,1);
}
다른 사람의 정답코드에서 getOrDefault메서드를 보게되었다.
getOrDefault(Object key, V DefaultValue)
HashMap.getOrDefault('B', 0)
- 'B'라는 Key에 해당하는 Value가 있으면 가져오고, 아닐 경우 0을 Default로 지정하여 사용하겠다는 의미의 함수
위의 4줄짜리 코드가 한줄로 바뀌는걸 보게 되었는데 안사용할수는 없지
map.put(type, map.getOrDefault(type, 0) + 1);
map.getOrDefault(type, 0) + 1
map.getOrDefault(type, 0) : 값이 있으면 해당 값을 가져와서 + 1 되고,
값이 없으면 default로 0이지정되기 때문에 value로 1이 들어갈 수 있다!!
references
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[카카오][이진트리][lv.3] 길찾기 게임 - 자바(Java) (0) | 2022.12.03 |
---|---|
[고득점kit][힙][lv.2] 더 맵게 - 자바(Java) (0) | 2022.11.30 |
[코딩테스트입문][lv.0] 최대값 만들기(1) - 자바(Java) (0) | 2022.11.23 |
[코딩테스트입문][lv.0] 문자열뒤집기 - 자바(Java) (0) | 2022.11.22 |
[프로그래머스][lv.1] 문자열 내 p와 y의 개수 - 자바(Java) (0) | 2022.11.02 |