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
- 1931번
- 회의실 배정
- spring
- 코드트리 챌린지
- TagLibraryValidator
- 구름톤
- 코드트리
- Today I Learned
- 최장 공통 부분수열
- 코딩테스트
- 백준 #1010 #다리놓기
- 공부 기록
- eager
- 완전탐색
- 구름톤 트레이닝
- 즉시로딩
- 지연로딩
- 멀록 조명등
- 코딩테스트실력진단
- @EntityGraph
- 1005 #ACM craft #백준
- 구름톤 챌린지
- 공부하기 싫어 #그래도 해야해
- til
- 백준
- JPA
- IT 좀 아는 사람
- 행복한 수열의 개수
- 동적 계획법
- 금 채굴하기
Archives
- Today
- Total
화분
[코드트리 챌린지] 금 채굴하기 본문
문제 설명 링크 : https://www.codetree.ai/missions/2/problems/gold-mining?&utm_source=clipboard&utm_medium=text
이번 문제는 완전탐색의 문제이다. 이 문제를 살펴보고 나서 처음 떠오른 건 코드를 시작한 지 얼마 안됐을때 접한 다이아몬드 그리기 문제였다. 당시엔 정말 어려웠는데... 지금도 이 문제가 물론 어려웠지만 수식을 짜고 코드로 구현한 결과 문제를 풀 수 있었다. k의 최대 크기는 한 변의 길이보다 1 작다고 가정하고 풀었다.
import java.util.*;
import java.io.*;
public class Main {
static int[][] arr2d;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] NM = br.readLine().split(" ");
int N = Integer.parseInt(NM[0]);
int M = Integer.parseInt(NM[1]);
arr2d = new int[N][N];
for(int i = 0; i < N; i++){
String[] temp = br.readLine().split(" ");
for(int j = 0; j < N; j++){
arr2d[i][j] = Integer.parseInt(temp[j]);
}
}
int max = 0;
for(int k = 0; k < N; k++){
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
int gold = shapeDiamond(N, k, M, i, j);
if(gold != -1){
max = (max < gold) ? gold : max;
}
}
}
}
System.out.print(max);
}
public static int cost(int k){
return (k*k + (k+1)*(k+1));
}
public static int shapeDiamond(int N, int k, int m, int r, int c){
int countOfGold = 0;
for(int i = k*(-1); i < (k + 1); i++){
if(i <= 0){
int temp = (-k) - i;
for(int j = temp; j < (-temp) + 1; j++){
if(r+i < 0 || r+i >= N || c+j < 0 || c+j >= N) continue;
if(arr2d[r + i][c + j] == 1) countOfGold += 1;
}
}
else{
int temp = k - i;
for(int j = (-temp); j < temp + 1; j++){
if(r+i < 0 || r+i >= N || c+j < 0 || c+j >= N) continue;
if(arr2d[r + i][c + j] == 1) countOfGold += 1;
}
}
}
return (cost(k) <= countOfGold * m) ? countOfGold : -1;
}
}
'Study > CODINGTEST' 카테고리의 다른 글
[Baekjoon]1107번 리모컨 풀이 (0) | 2023.12.11 |
---|---|
[코드트리 챌린지] 홀수 짝수의 묶음 (0) | 2023.09.13 |
[코드트리 챌린지] 트로미노 (0) | 2023.09.11 |
[구름톤 챌린지 19일차] 대체 경로 (0) | 2023.09.10 |
[구름톤 챌린지 20일차] 연결 요소 제거하기 (0) | 2023.09.10 |