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 | 31 |
Tags
- DP
- dfs
- java 프로그래머스
- 프로그래머스 java
- 카카오
- 자바 5464
- 백준 18222
- 스택
- Java
- 백준 16935
- leetcode
- 리트코드 1557
- 인텔리제이 에러
- 스프링 에러
- java leetcode
- 리트코드
- 코테
- BFS
- daily challenge
- 분할정복
- leetcode 1721
- 자바 리트코드
- 파이썬
- 자바
- 구현
- 그래프 자바
- 코딩테스트
- 프로그래머스
- 리트코드 자바
- 백준
Archives
- Today
- Total
레벨업 일지
[Java] 프로그래머스 석유 시추 본문
문제
코딩테스트 연습 - [PCCP 기출문제] 2번 | 프로그래머스 스쿨 (programmers.co.kr)
가장 많은 석유량을 return 해보자
풀이
풀이는 다음과 같습니다.
- dfs 하면서, 석유 덩어리가 나오면 해당 덩어리 전처에 마킹을 합니다.
- 해시맵에 마킹번호, 덩어리 개수를 저장합니다.
- 해시맵에 저장이 끝난 후 , 시추관으로 위에서 아래로 탐색하면서 Set 에 마킹 넘버링을 담습니다.
- answer 변수를 update 하면서 모든 열 에대해 탐색합니다.
- answer를 리턴합니다.
Stream.of(s).mapToInt(myMap::get).sum();
처음에 Stream.of(set) 구조로 스트림을 구성했는데, nullPointer 오류 가 떴다. 이유는 Stream.of( A ) 메서드는 A 타입을 Stream< A > 이렇게 감싸는 형태이기 때문이다. 위의 코드는 Stream< Set<Integer> > 으로 mapToInt 에 들어간다, 하지만 map 의 key는 Integer이기 때문에 키가 존재하지 않아서 nullpointerException 이 발생하였다.
다음 코드처럼 수정하여서 Stream<Integer> 타입으로 구성하게 하였다.
int addAll = s
.stream()
.mapToInt(myMap::get)
.sum();
코드
import java.util.*;
import java.util.stream.*;
class Solution {
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
public int solution(int[][] land) {
int answer = 0;
List<int[]> list = new ArrayList<>();
HashMap<Integer, Integer> myMap = new HashMap<>();
int idx = 2;
int cnt = 0;
for(int i =0 ;i < land.length; i++){
for(int j = 0 ;j < land[0].length;j ++){
if(land[i][j] == 1){
cnt = dfs(land,i,j,idx);
myMap.put(idx++,cnt);
}
}
}
for(int j =0 ;j< land[0].length; j++){
Set<Integer> s = new HashSet<>();
for(int i = 0;i < land.length ;i ++){
if(land[i][j] > 1 && !s.contains(land[i][j] )){
s.add(land[i][j]);
}
}
int addAll = s
.stream()
.mapToInt(myMap::get)
.sum();
answer = Math.max(answer, addAll);
}
return answer;
}
public int dfs(int[][] l , int x, int y,int m){
if(x < 0 || y < 0 || x > l.length -1 || y > l[0].length-1 || l[x][y] !=1 )return 0;
int ret = 1;
l[x][y] = m;
for(int k =0; k < 4; k++){
ret += dfs(l,x + dx[k], y+dy[k], m);
}
return ret;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 광물 캐기 (0) | 2023.04.05 |
---|---|
[Java] 프로그래머스 파괴되지 않은 건물 (0) | 2023.02.23 |
[Java] 프로그래머스 유전법칙 (0) | 2023.02.16 |
[Java] 프로그래머스 올바른 괄호 (0) | 2023.02.14 |
[Java] 프로그래머스 이모티콘 할인 (1) | 2023.02.08 |
Comments