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
- 백엔드
- error
- jpa
- 개념
- java
- Thymeleaf
- Gold4
- 9252
- mysql
- HTML
- 구현
- gold2
- LEVEL1
- PYTHON
- LCS
- 백준
- AWS
- Kakao
- glod5
- 프로그래머스
- 오류
- LEVEL2
- 배포
- spring
- gold5
- CSS
- siver3
- leetcode 69
- leetcode
- glod4
Archives
- Today
- Total
이 험난한 세상에서어어~
프로그래머스, 무인도 여행(python, java) 본문
문제 설명
상하좌우로 움직이는데, 숫자로만 이어진 칸을 무인도라고 한다. 각 칸의 숫자를 구해서 오름차순 정렬후 반환하는 문제다. 만일 무인도가 없으면 -1을 반환한다.
https://school.programmers.co.kr/learn/courses/30/lessons/154540?language=python3
문제 풀이
첫 번째 접근
단순한 넓이 우선 탐색이라 금방 풀 수 있을 거라 생각했던 문제.
그러나 pair class의 row와 col을 바꿔서 써준 덕분에 예상보다 시간이 훨씬 많이 걸렸다.
코드
java
import java.util.*;
class pair{
int row;
int col;
pair(int row, int col){
this.col = col;
this.row = row;
}
}
class Solution {
public static boolean[][] visit;
public static int colLength, rowLength;
public static int[] dR = {-1, 0, 1, 0}; //북동남서
public static int[] dC = {0, 1, 0, -1};
public int bfs(int r, int c, String[] map){
Queue<pair> queue = new LinkedList<>();
queue.add(new pair(r, c));
visit[r][c] = true;
int count = map[r].charAt(c)-'0';
while(queue.size() != 0){
pair current = queue.poll();
int cR = current.row;
int cC = current.col;
for(int i=0; i<4; i++){
int nR = cR + dR[i];
int nC = cC + dC[i];
if(nR >= 0 && nR < rowLength && nC >= 0 && nC < colLength){
if(map[nR].charAt(nC) != 'X' && visit[nR][nC] == false){
visit[nR][nC] = true;
count += (map[nR].charAt(nC) - '0');
queue.add(new pair(nR, nC));
}
}
}
}
return count;
}
public int[] solution(String[] maps) {
int[] answer = {};
colLength = maps[0].length();
rowLength = maps.length;
visit = new boolean[rowLength][colLength];
List<Integer> list = new ArrayList<>();
for(int i=0; i<rowLength; i++){
for(int j=0; j<colLength; j++){
if(maps[i].charAt(j) != 'X' && visit[i][j] == false){
list.add(bfs(i, j, maps));
}
}
}
if(list.size() == 0){
answer = new int[1];
answer[0] = -1;
return answer;
}
answer = new int[list.size()];
Collections.sort(list);
for(int i=0; i<list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
python
from collections import deque;
def solution(maps):
answer = []
dR = [-1, 0, 1, 0]
dC = [0, 1, 0, -1]
rowLength = len(maps)
colLength = len(maps[0])
visit = [[False for _ in range(colLength)] for _ in range(rowLength)]
def bfs(r, c, maps):
dq = deque()
dq.append([r, c])
visit[r][c] = True
count = int(maps[r][c])
while dq:
current = dq.popleft()
cR = current[0]
cC = current[1]
for i in range(4):
nR = cR + dR[i]
nC = cC + dC[i]
if 0 <= nR < rowLength and 0 <= nC <colLength:
if maps[nR][nC] != "X" and visit[nR][nC] == False:
visit[nR][nC] = True
count += int(maps[nR][nC])
dq.append([nR, nC])
return count
for i in range(rowLength):
for j in range(colLength):
if maps[i][j] != 'X' and visit[i][j] == False:
answer.append(bfs(i, j, maps))
if len(answer) == 0:
answer.append(-1)
return answer
answer.sort()
return answer
'algorithm > 코딩 테스트' 카테고리의 다른 글
점 찍기 (0) | 2023.07.18 |
---|---|
테이블 해시 함수 (0) | 2023.07.15 |
호텔 대실 (0) | 2023.07.10 |
프로그래머스, 택배상자(python) (0) | 2023.07.08 |
2개 이하로 다른 비트(python, java) (0) | 2023.07.07 |