상어 중학교 질문! #51
Replies: 2 comments 9 replies
-
|
중력이 작용되는 부분이 블록전체가 다 내려오는것도 아니고 사라진 부분에 한해서만 내려오는게 어렵네요... 문제를 조금 더 고민해보겠습니다! |
Beta Was this translation helpful? Give feedback.
-
|
제가 제대로 코드를 읽은게 맞는지 모르겠지만, 제가 이해한바로는.. 우선, @Override
public int compareTo(position o) {
if(this.totalBlock == o.totalBlock){
if(this.rainbow == o.rainbow){
if(this.x == o.x){
return this.y - o.y;
}return this.x - o.x; // 오름차순
}return o.rainbow - this.rainbow;
}return o.totalBlock - this.totalBlock; // 내림차순
}이 부분에서 x, y값도 오름차순이 아닌 내림차순으로 처리해주셔야할거같아요. 그리고... // i,j를 기준블록으로 했을때 같은 색의 블록 수를 계산하자
if(board[i][j]==-1 || board[i][j]==0 || board[i][j] == None) continue;
int color = board[i][j]; // 기준색위의 조건에서 걸어주셨다시피, i, j값이 0부터 N-1까지 돌면서 위의 조건을 만족해서 다음 프로세스로 넘어간다면, 무조건 위의 compare 함수에서의 x, y값조건은 항상 충족하게 됩니다. 그래서 compare 함수도 줄일수있을것 같아요. 상어초등학교 문제와 마찬가지로... PQ는 좋은선택은 아닌것으로 생각됩니다! 블록에 포함되는 총 갯수, 무지개색 갯수 이 두가지만 비교해줘도 충분히 해결이 되므로 PQ를 사용안하는쪽으로 해보시는걸 권장해드립니다! 마지막으로, // counter-clock wise
public static void rotate(){ // O(2N^2)
int[][] temp = new int[N][N];
for(int i = 0 ; i<N ; i++){
for(int j = 0 ; j<N; j++){
temp[i][j]=board[i][j]; // copy
}
}
for(int i = 0 ; i<N ; i++){
for(int j = 0 ; j<N; j++){
board[i][j] = temp[j][N-i-1];
}
}
}위 함수에서, temp 변수를 선언과 동시에 초기화를 해줬으므로 굳이 copy하는 과정은 없어도 될것같습니다! 코드스타일이 많이 달라서 제가 잘 이해한게 맞는건지 모르겠네요.. 도움이 될지모르겠지만 우선 제 코드는 아래 남겨놓겠습니다! 코드설명이 따로 필요하시다면 언제든 편하게 말씀해주세요 |
Beta Was this translation helpful? Give feedback.

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
https://www.acmicpc.net/problem/21609
약간 복잡한 구현 문제인데 문제에서 시키는 대로 분리해서 코드 짰습니다.
첫번째, 세번째 테케는 통과하는데 두번째 테스트케이스에서 다른 결과가 나옵니다.
어디가 문제인지 함께 고민해주실분을 찾습니다..!
https://github.com/sds-2021-summer-algorithm/java/tree/main/solution/BOJ_21609_%EC%83%81%EC%96%B4%EC%A4%91%ED%95%99%EA%B5%90
Beta Was this translation helpful? Give feedback.
All reactions