목표
✨ 프로그래머스 레벨2 혼자 풀기
import java.util.*;
class Solution {
public String[] solution(String[] players, String[] callings) {
Map<String, Integer> map = new HashMap<>();
int index = 0;
for(String p : players) map.put(p, index++);
for(String c : callings) {
int callingsIndex = map.get(c).intValue(); // get 함수는 값을 가져오는 것. 즉 인덱스 추출
int targetIndex = callingsIndex - 1; // 자리가 바뀔 선수의 인덱스
String targetPlayer = players[targetIndex]; // 원래 순위 사람 저장
players[targetIndex] = c; // 앞에 순위로 바꿔줌
players[callingsIndex] = targetPlayer; // 원래 순위 사람은 뒤로
// map에 저장
map.put(targetPlayer, callingsIndex);
map.put(c, targetIndex);
System.out.println(map);
}
return players;
}
}
import java.util.*;
class Solution {
public int[] solution(String[] name, int[] yearning, String[][] photo) {
int[] result = new int[photo.length];
// map에 저장
Map<String, Integer> map = new HashMap<>();
for(int i = 0; i < name.length; i++){
map.put(name[i], yearning[i]);
}
// 계산
for(int i = 0; i < photo.length; i++) {
int sum = 0;
for(int j = 0; j < photo[i].length; j++) {
if(map.get(photo[i][j]) != null) {
sum += map.get(photo[i][j]).intValue();
} else {
sum += 0;
}
}
result[i] = sum;
}
return result;
}
}
🔎 접근법
1. 문제는 배열에 OOO 이렇게 담겨 있는 걸 어떻게 직사각형의 모양으로 생각하면서? 풀 수 있는가임 --> 2차원 배열을 활용할까 싶음
2. 명령어가 "E 2"이런 형식인데 이걸 분해해서 전달해야 할 것 같은데.. 움 -> split() 사용하장
3. 내가 간과한 것 -> 시작 위치 설정
class Solution {
static char [][] cPark;
static int [] now; // 현재 위치
public int[] solution(String[] park, String[] routes) {
// 정원 만들기
cPark = new char[park.length][park[0].length()];
for(int i = 0; i < park.length; i++) {
for(int j = 0; j < park[i].length(); j++) {
cPark[i][j] = park[i].charAt(j);
}
}
// 시작 위치 설정
now = new int[2];
for(int i = 0; i < park.length; i++) {
for(int j = 0; j < park[i].length(); j++) {
if(cPark[i][j] == 'S') {
now[0] = i;
now[1] = j;
break;
}
}
}
// 명령 처리
for(int i = 0; i < routes.length; i++) {
boolean isCorrect = move(routes[i].split(" ")[0], Integer.parseInt(routes[i].split(" ")[1]));
}
return now;
}
public static boolean move(String direction, int distance) {
int x = now[1]; // 현재 가로
int y = now[0]; // 현재 세로
// 이동 시키기
for(int i = 0; i < distance; i++) {
switch (direction) {
case "N": y--; break;
case "S": y++; break;
case "W": x--; break;
case "E": x++; break;
}
// 범위 넘는지 확인
if (y < 0 || y >= cPark.length || x < 0 || x >= cPark[0].length) {
return false; // 공원을 벗어나면 이동하지 않음
}
// X면 실행하지 않기
if(cPark[y][x] == 'X') {
return false;
}
}
now[0] = y;
now[1] = x;
return true;
}
}
가로 세로 헷갈려 죽는줄 ㅡㅡ ;;;
🔎 접근법
1. #가 존재하는 최대 x, y와 최소 x, y를 구해야 함
2. 최대는 +1 해줘야 함 !!
public int[] solution(String[] wallpaper) {
char[][] arr = new char[wallpaper.length][wallpaper[0].length()];
// char로 변환
for(int i = 0; i < wallpaper.length; i++) {
for(int j = 0; j < wallpaper[i].length(); j++) {
arr[i][j] = wallpaper[i].charAt(j);
}
}
// 계산
// #가 존재하는 최대 x, y와 최소 x, y를 구해야 함
int xMin = 50;
int xMax = 0;
int yMin = 50;
int yMax = 0;
// j가 x 좌표 i가 y좌표
for(int i = 0; i < wallpaper.length; i++) {
for(int j = 0; j < wallpaper[i].length(); j++) {
if(arr[i][j] == '#') {
if(j > xMax) xMax = j;
if(j < xMin) xMin = j;
if(i > yMax) yMax = i;
if(i < yMin) yMin = i;
}
}
}
int [] drag = new int[] {yMin, xMin, yMax + 1, xMax + 1};
return drag;
}
🔎 접근법
class Solution {
public int solution(int n, int m, int[] section) {
int distance = 0;
int count = 0;
for(int i = 0; i < section.length; i++) {
if(distance >= section[i]) continue;
distance = section[i] + m - 1;
count++;
}
return count;
}
}
원래는 칠한 여부를 표시하는 배열을 만들까 했는데 복잡해질 것 같아서 변경함
할수있겠져 저 🥺 잘하고 있는거겠지,,ㅡㅠㅜㅠㅓㅜ?