https://programmers.co.kr/learn/courses/30/lessons/77485
1. 초기 셋팅
import java.util.*;
public class 메뉴리뉴얼 {
public static void main(String[] args) {
System.out.println(solution(
6,
6,
new int[][] {{2,2,5,4},{3,3,6,6},{5,1,6,3}}
));
}
// 1. 코스요리 메뉴는 최소 2가지 이상의 단품메뉴 구성
// 2. 최소 2명 이상의 손님으로부터 주문된 단품메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함하기로 했습니다.
// 3. 단품메뉴를 4개 이상 주문한 손님은 없다!!!
public static int[] solution(int rows, int columns, int[][] queries){
int[] answer = {};
// 초기 셋팅 배열 (1,1)로 시작하기 위해서, 첫번째들은 다 0으로 넣었습니다. 그런데 이러면 안됨(프로그래머스가,, 인식을 못함,,, 그래서 0 빼야됨....)
int[][] temp = new int[rows][columns];
int num = 1;
for(int r = 0;r<rows;r++) {
for(int c = 0;c<columns;c++) {
temp[r][c] = num;
num++;
}
}
for(int y=0;y<temp.length;y++) {
for(int x=0;x<temp[y].length;x++) {
System.out.print(temp[y][x]);
}
System.out.println();
}
return answer;
}
}
2. 위쪽가로, 오른쪽세로, 아랫쪽가로, 왼쪽세로 데이터 이동 하였고,
firstNumTemp, twoNumTemp, threeNumTemp, forNumTemp 여기에 각각의 끝 값들 저장해 놓은거 까지 구현,,,,,,,,,,이 상태에서 각 위,오른,아랫,왼의 2번째에다가 다시 넣어주는 코드 해줘야함
import java.util.*;
public class 메뉴리뉴얼 {
public static void main(String[] args) {
System.out.println(solution(
6,
6,
new int[][] {{2,2,5,4},{3,3,6,6},{5,1,6,3}}
));
}
// 1. 코스요리 메뉴는 최소 2가지 이상의 단품메뉴 구성
// 2. 최소 2명 이상의 손님으로부터 주문된 단품메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함하기로 했습니다.
// 3. 단품메뉴를 4개 이상 주문한 손님은 없다!!!
public static int[] solution(int rows, int columns, int[][] queries){
int[] answer = {};
// 초기 셋팅 배열 (1,1)로 시작하기 위해서, 첫번째들은 다 0으로 넣었습니다. 그런데 이러면 안됨(프로그래머스가,, 인식을 못함,,, 그래서 0 빼야됨....)
int[][] temp = new int[rows][columns];
int num = 1;
for(int r = 0;r<rows;r++) {
for(int c = 0;c<columns;c++) {
temp[r][c] = num;
num++;
}
}
// 출력 확인 용도
for(int y=0;y<temp.length;y++) {
for(int x=0;x<temp[y].length;x++) {
System.out.print(temp[y][x]);
}
System.out.println();
}
// 그냥 구분
// a,b,c,d
// f,g,h,i
// k,l,m,n
// 예제는 값이 1부터 시작이고 위치도 1부터 시작임, 내가 구하는 코드는 배열이라 0부터 시작 !! (주의)
for(int a=0;a<queries.length;a++) { // a는 첫번째 행 시작 ㄱㄱ
// 첫번째 좌표(f,g)
int f = queries[a][0]-1; // 구현하는 코드에서는 0부터 시작이라 1을 빼줘야함 (-1)!!!★
int g = queries[a][1]-1;
// 두번째 좌표(h,i)
int h = queries[a][2]-1;
int i = queries[a][3]-1;
// 시계 방향으로 회전
// 첫번째 - 위에 가로
for(int k=i;g<=k;k--) {
// 맨 우측부터 시작 하면 될 듯 한데?? 오!! (빼면서 왼쪽으로 하는 방식으로 구현함)
int firstNumTemp; // 임시 숫자 저장할 곳
// 가장 오른쪽 끝 일 경우에만,
if(k==temp[f].length)
firstNumTemp = temp[f][k];
// 맨왼쪽에 다 왔을 때
if(k==g) {
continue; // 그냥 넘겨
}else {
temp[f][k] = temp[f][k-1];
}
}
// 두번째 - 세로 오른쪽
for(int l=h;f<=l;l--) {
// 맨 아래부터 시작 하면 될 듯 한데?? 오!! (빼면서 위쪽으로 하는 방식으로 구현함)
int twoNumTemp; // 임시 숫자 저장할 곳
// 가장 아랫쪽 끝 일 경우에만,
if(l==temp.length)
twoNumTemp = temp[l][i];
// 맨위쪽에 다 왔을 때
if(l==f) {
continue;
}else {
temp[l][i] = temp[l-1][i];
}
}
// 셋번째 - 아래 가로
for(int m=g;m<=i;m++) {
// 맨 좌측부터 시작 하면 될 듯 한데?? 오!! (빼면서 오른쪽으로 하는 방식으로 구현함)
int threeNumTemp; // 임시 숫자 저장할 곳
// 가장 좌측 끝 일 경우에만,
// if(m==temp[h].length)
if(m==0)
threeNumTemp = temp[h][g];
// 맨오른쪽에 다 왔을 때
if(m==i) {
continue; // 그냥 넘겨
}else {
temp[h][m] = temp[h][m+1];
}
}
// 넷번째 - 세로 왼쪽
for(int n=f;n<=h;n++) {
int forNumTemp;
// if(n==temp.length)
if(n==0)
forNumTemp = temp[n][g];
// 맨아래쪽에 다 왔을 때
if(n==h) {
continue;
}else {
temp[n][g] = temp[n+1][g];
}
}
// 각각의 모서리 구현
// 그 중에 제일 작은 값을 최종 출력
}
return answer;
}
}
아아아아아
'Other > 코테 문제' 카테고리의 다른 글
[코테] 땅따먹기_2단계 (0) | 2021.06.13 |
---|---|
[코테] 가장큰수_정렬_2단계 - "compare():비교" (0) | 2021.05.15 |
[코테] 주식가격_스택/큐_2단계 - "" - 못풀음------ (0) | 2021.05.09 |
[코테] 기능개발_스택/큐_2단계 - "Math.ceil()" (0) | 2021.05.08 |
[코테] 음양 더하기 (0) | 2021.04.28 |