일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 재귀
- Spring Security
- JPA
- 백준
- Vue
- 정보처리기사
- 프로젝트
- 스택
- 너비 우선 탐색
- SWEA
- n과 m
- springboot
- 그래프 탐색
- 배포
- 브루트포스 알고리즘
- 알고리즘
- 다이나믹 프로그래밍
- 자료 구조
- dfs
- 구현
- DB
- 그래프 이론
- MYSQL
- 깊이 우선 탐색
- 프로그래머스
- 소수 판정
- 백트래킹
- 수학
- 정수론
- 문자열
Archives
- Today
- Total
영원히 남는 기록, 재밌게 쓰자
백준 [2477] 참외밭 (자바) 본문
728x90
반응형
문제 링크
https://www.acmicpc.net/problem/2477
입력
첫 번째 줄에 1m^2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지나는 변의 방향과 길이 (1 이상 500 이하의 정수) 가 둘째 줄부터 일곱 번째 줄까지 한 줄에 하나씩 순서대로 주어진다. 변의 방향에서 동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4로 나타낸다.
출력
첫째 줄에 입력으로 주어진 밭에서 자라는 참외의 수를 출력한다.
풀이
문제 조건에 육각형 변으로 입력이 들어온다는 것이 입력에 대한 힌트인지 몰라 너무 어렵게 생각했다.
- 제일 긴 가로길이와 세로길이와 위치를 구한다.
- 가로 위치의 양옆이 세로 길이의 위치로 이 차이가 빈 사각형의 세로 위치가 된다.
- 마찬가지로 세로 위치의 양 옆이 가로 길이의 위치로 이 차이가 빈 사각형의 가로 위치가 된다.
- 이렇게 구한 큰 사각형 넓이 - 작은 사각형 넒이 * 단위 면적 당 참외의 개수를 해주면 된다.
정답 코드
package com.baekjoon.p2477;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[6];
int maxWidth = 0, maxHeight = 0, d, maxWidthIdx = 0, maxHeightIdx = 0;
for (int i = 0; i < 6; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
d = Integer.parseInt(st.nextToken());
arr[i] = Integer.parseInt(st.nextToken());
// 최대 가로길이 구하기
if ((d == 1 || d == 2) && maxWidth < arr[i]) { // 가로방향이면서 최대 길이를 만족할 때만 최대 가로길이로 갱신
maxWidth = arr[i];
maxWidthIdx = i;
}
// 최대 세로길이 구하기
else if ((d == 3 || d == 4) && maxHeight < arr[i]) { // 세로방향이면서 최대 길이를 만족할 때만 최대 세로길이로 갱신
maxHeight = arr[i];
maxHeightIdx = i;
}
}
int right, left, minWidth, minHeight;
// 빈사각형 가로 세로 구하기
if (maxWidthIdx + 1 == 6)
right = 0;
else
right = maxWidthIdx + 1;
if (maxWidthIdx - 1 == -1)
left = 5;
else
left = maxWidthIdx - 1;
minHeight = Math.abs(arr[right] - arr[left]);
if (maxHeightIdx + 1 == 6)
right = 0;
else
right = maxHeightIdx + 1;
if (maxHeightIdx - 1 == -1)
left = 5;
else
left = maxHeightIdx - 1;
minWidth = Math.abs(arr[right] - arr[left]);
System.out.println(((maxWidth * maxHeight) - (minWidth * minHeight)) * N);
}
}
728x90
반응형
'Algorithm > 백준' 카테고리의 다른 글
백준 [1138] 한 줄로 서기 (자바) (0) | 2024.05.21 |
---|---|
백준 [17103] 골드바흐 파티션 (자바) (0) | 2024.05.20 |
백준 [15665] N과 M (11) (0) | 2024.05.17 |
백준 [15664] N과 M (10) (0) | 2024.05.17 |
백준 [11403] 경로 찾기 (0) | 2024.04.29 |