일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 탐욕법
- GAN
- Algorithm
- 소프티어
- 토이프로젝트
- 힙큐
- 자바
- 스마트팩토리
- cs공부
- heapq
- Java
- re_lunchu
- JavaScript
- 자바스크립트
- 현대
- 현대자동차
- boj
- programmers
- softeer
- 티스토리챌린지
- alogorithm
- 딥러닝
- 백준
- 프로그래머스
- Python
- 오블완
- 파이썬
- cim
- Baekjoon
- Today
- Total
eaz_coding
[Programmers] 무인도 여행(Python, Java, JavaScript) 본문
문제
요약
각 칸마다의 머무를 수 있는 날짜가 적힌 maps가 주어질 때, 무인도에서 머무를 수 있는 최대 기간 오름차순으로 구해라.
없으면 [-1] 반환.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/154540?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
Python
def solution(maps):
answer = []
n, m = len(maps), len(maps[0])
visited = [[0]*m for _ in range(n)]
directions = [(-1,0), (1,0), (0,-1), (0,1)]
stack = []
for i in range(n):
for j in range(m):
if maps[i][j] != "X" and visited[i][j] == 0:
visited[i][j] = 1
stack.append((i, j))
t = int(maps[i][j])
while stack:
x, y = stack.pop()
for dx, dy in directions:
nx, ny = x+dx, y+dy
if 0 <= nx < n and 0 <= ny < m and visited[nx][ny] == 0 and maps[nx][ny] != "X":
stack.append((nx, ny))
visited[nx][ny] = 1
t += int(maps[nx][ny])
answer.append(t)
answer.sort()
return answer if answer else [-1]
Java
1. 배열 길이는 .length로 속성으로 가져오지만, 문자열 길이는 .length()로 가져온다.
2. 자바는 Stack을 제공하기 때문에 배열이 아니라 Stack을 사용하면 된다.
3. substring을 이용한 슬라이싱을 해서 문자열로 비교하면 ==, != 비교가 아니라 equals를 이용한 비교를 해야 한다.
4. Integer.parseInt말고 character에서 숫자로 바꾸는 것은 Character.getNumericValue(
import java.util.*;
class Solution {
public ArrayList<Integer> solution(String[] maps) {
ArrayList<Integer> answer = new ArrayList<Integer>();
int n = maps.length;
int m = maps[0].length();
int[] dx = {-1, 1, 0, 0};
int[] dy = {0, 0, -1, 1};
int[][] visited = new int[n][m];
for (int i = 0; i < n; i++) {
Arrays.fill(visited[i], 0);
}
Stack<int[]> stack = new Stack<>();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (maps[i].charAt(j) != 'X' && visited[i][j] == 0) {
stack.push(new int[]{i, j});
visited[i][j] = 1;
int t = Character.getNumericValue(maps[i].charAt(j));
while (!stack.isEmpty()) {
int[] popped = stack.pop();
for (int k = 0; k < 4; k++) {
int nx = popped[0] + dx[k];
int ny = popped[1] + dy[k];
if (0 <= nx && nx < n && 0 <= ny && ny < m && visited[nx][ny] == 0 && maps[nx].charAt(ny) != 'X') {
stack.push(new int[]{nx, ny});
visited[nx][ny] = 1;
t += Character.getNumericValue(maps[nx].charAt(ny));
}
}
}
answer.add(t);
}
}
}
if (answer.isEmpty()) {
ArrayList<Integer> result = new ArrayList<>();
result.add(-1);
return result;
} else {
Collections.sort(answer);
return answer;
}
}
}
JavaScript
갑작스레 자바스크립트 코테를 보게 되어서 자바스크립트로 문제 풀기
새로 알게 된 것
1. 여러개 함수 한번에 선언하는 법
2. 2차원 배열 만드는 방법 Array.from(Array(n), () => Array(m).fill(0)); (중요! 꼭 외울것)
3. 문자열 to 숫자 : parseInt, Number
4. Stack 구현은 리스트에서 push, pop으로 가능/ Queue는 리스트에서 push, unshift로 가능
5. Sort 사용할 때, 값 비교할 수 있도록 .sort((a, b) => a-b); 필요. 내림차순은 b-a
function solution(maps) {
let answer = [];
const [n, m] = [maps.length, maps[0].length];
let visited = Array.from(Array(n), () => Array(m).fill(0));
const directions = [[-1,0], [1, 0], [0, -1], [0, 1]];
let stack = [];
for (let i = 0; i < n; i++){
for (let j = 0; j < m; j++){
if (maps[i][j] !== "X" && !visited[i][j]){
stack.push([i, j]);
visited[i][j] = 1;
let t = parseInt(maps[i][j]);
while (stack.length) {
const p = stack.pop();
for (let k =0; k<4; k++){
const nx = p[0] + directions[k][0];
const ny = p[1] + directions[k][1];
if (0 <= nx && nx < n && 0 <= ny && ny < m && maps[nx][ny] !== "X" && !visited[nx][ny]){
stack.push([nx, ny]);
visited[nx][ny] = 1;
t += Number(maps[nx][ny]);
}
}
}
answer.push(t);
}
}
}
if (answer.length){
return answer.sort((a, b) => a - b);
} else {
return [-1];
}
}
'eaz_algorithm' 카테고리의 다른 글
[Programmers] 괄호 변환(Javascript) (0) | 2024.06.05 |
---|---|
[Programmers] 줄 서는 방법(JavaScript) (0) | 2024.06.05 |
[Programmers] 방금그곡 (Python, Java) (1) | 2024.06.03 |
[Programmers] 배달(Python, Java) (0) | 2024.06.03 |
[Programmers] 시소 짝꿍(Python, Java) (0) | 2024.05.30 |