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
- 파이썬
- dfs
- 리트코드 자바
- 프로그래머스 java
- daily challenge
- 자바
- 코테
- 스택
- 자바 5464
- leetcode 1721
- 백준
- 구현
- Java
- 코딩테스트
- 프로그래머스
- 스프링 에러
- 백준 18222
- java 프로그래머스
- 리트코드
- 그래프 자바
- 백준 16935
- leetcode
- 분할정복
- java leetcode
- 인텔리제이 에러
- 리트코드 1557
- 자바 리트코드
- DP
- BFS
- 카카오
Archives
- Today
- Total
레벨업 일지
[Java] 프로그래머스 등굣길 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42898?language=java#
목표 지점 까지 최단 경로의 총 개수를 구하는 문제
알아야 할 개념
- 경로 개수 세기
- 모듈로
- 삼항 연산자
풀이
문제를 잘 읽자 !!
처음에 최단 경로의 총 개수가 아니라 최단 거리를 구하는 줄 알고 삽질을 했다. 역시 문제를 정확히 이해하는 것이 중요한 것을 다시 한 번 깨달았다.
로직은 다음과 같다.
- 주어진 조건에 맞추어 웅덩이 위치, 0행, 0열을 초기화 한다.
- 개수 카운팅을 한다.
- 정답을 리턴한다.
우선 웅덩이 위치랑 0행 0열을 모두 초기화 한다.
웅덩이가 있는 곳은 -1 로 먼저 초기화 하고, 0행 0열 탐색 하면서 1로 초기화 하다 웅덩이를 만난 순간 -1 로 초기화 한다. (도달 할 수 없으니 )
그 다음(1,1) 위치부터 개수 카운팅을 다음과 같은 원리로 한다. 현재 위치에 위쪽 + 왼쪽 개수를 할당한다.
경로 개수 세기는 초등학교 수학때 한 번씩 해 봤을 것이다.
개수를 셀 때 다음과 같은 예외처리를 해준다.
- 웅덩이를 만났을 때에는 개수를 세지 않아야 한다.
- 양쪽 다 웅덩이일 떄는 -1 로 할당한다.
- 경로가 1,000,000,007 을 넘어가면 모듈로 연산을 적용해야 한다. (모듈로는 나머지 라는 뜻)
주의
자바에서 향상된 for 문을 사용할 때 [[]] 같이 빈 배열도 실행 됨으로 주의할 것. ( index out of bound ) 에러 뜬다.
다음과 같이 if 문을 걸어주었다.
if(puddles[0].length > 0){
for(int x[] : puddles){
map[x[1]-1][x[0]-1] = -1;
}
}
코드
자바
import java.util.*;
class Solution {
public int solution(int m, int n, int[][] puddles) {
int [][] map = new int[n][m];
if(puddles[0].length > 0){
for(int x[] : puddles){
map[x[1]-1][x[0]-1] = -1;
}
}
for(int i = 1 ;i < n; i++){
map[i][0] = (map[i][0] == -1 | map[i-1][0] == -1) ? -1 : 1;
}
for(int j = 1 ;j < m ;j++){
map[0][j] = (map[0][j] == -1 | map[0][j-1] == -1) ? -1 : 1;
}
for(int i =1;i < n; i++){
for(int j= 1 ;j < m; j++){
if(map[i][j] != -1){
int a = map[i-1][j] == -1 ? 0 : map[i-1][j];
int b = map[i][j-1] == -1 ? 0 : map[i][j-1];
map[i][j] = (a+b) == 0 ? -1 : (a+b) % 1000000007;
}
}
}
return map[n-1][m-1] == -1 ? 0 : map[n-1][m-1];
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 시소 짝꿍 (2) | 2023.01.26 |
---|---|
[Java] 프로그래머스 단속카메라 (0) | 2023.01.24 |
[Java] 프로그래머스. 체육복 (0) | 2023.01.22 |
[Java] 프로그래머스 큰 수 만들기 (0) | 2023.01.20 |
[Java] 프로그래머스 2020 카카오 인턴_ 보석 쇼핑 (0) | 2023.01.16 |
Comments