https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRDL1aeugDFAUo
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
1. ๋ฌธ์ ์์ฝ
A๋ (1,1) B๋ (10,10) ์ขํ์์ ์์ํ์ฌ ๋งค ์ด๋ง๋ค ์ด๋ํ๋ฉด์, ํด๋น ์ขํ๊ฐ ์ถฉ์ ๋ฒ์์ ์์ ๊ฒฝ์ฐ ๋ ์ฌ์ฉ์๊ฐ ์ถฉ์ ํ ๊ฐ์ ์ต๋๊ฐ์ ๊ตฌํด ๋์ ํฉ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋ ์ฌ์ฉ์์ ์ขํ๊ฐ ๊ฐ์ ์ถฉ์ ๊ธฐ์ ๋ฒ์ ์์ ์์ ๊ฒฝ์ฐ, ์ถฉ์ ๊ธฐ์ ์ถฉ์ ๋/2์ฉ ์ถฉ์ ๋๋ค. ์ฆ, ์ด ์ถฉ์ ๋์ ํด๋น ์ถฉ์ ๊ธฐ์ ์ถฉ์ ๋๊ณผ ๊ฐ๋ค.
2. ํ์ด
1. ๋ ์ฌ์ฉ์์ ์์์์น์์๋ถํฐ ์ถฉ์ ๋ฒ์๋ฅผ ์ฒดํฌํ๋ค.
2. ๋งค ์ด๋ง๋ค ๋ ์ฌ์ฉ์์ ์ขํ๋ฅผ ์ด๋์ํค๊ณ , ๊ฐ๊ฐ์ ์ขํ์์ ์ถฉ์ ๋ฒ์๋ฅผ ์ฒดํฌํ๋ค.
- ํด๋น ์ขํ์์ ์ถฉ์ ๊ฐ๋ฅํ ์ถฉ์ ๊ธฐ ๋ฒํธ๋ฅผ ๊ฐ๊ฐ์ List์ ์ ์ฅํ๋ค.
(์ถฉ์ ๊ธฐ ๋ฒํธ ๋น ๋ฒ์ >= ์ถฉ์ ๊ธฐ์ ์ขํ์ ๊ฑฐ๋ฆฌ)
(์ฌ๋ฌ ์ถฉ์ ๊ธฐ์ ๋ฒ์์ ํด๋น๋๋ ๊ฒฝ์ฐ ์ฌ๋ฌ๊ฐ๊ฐ ๋ด๊ธด๋ค.)
- ๋ ์ฌ์ฉ์ ๋ชจ๋ ์ถฉ์ ๋ฒ์์ ์์ ๊ฒฝ์ฐ : ๋ชจ๋ ์กฐํฉ์ ๋ณธ๋ค.
=> ์ถฉ์ ๊ธฐ ๋ฒํธ๊ฐ ๊ฐ์ผ๋ฉด ์ถฉ์ ๊ธฐ ์ถฉ์ ๋, ๋ค๋ฅด๋ฉด ๋ ์ถฉ์ ๊ธฐ ์ถฉ์ ๋ ํฉ
=> ์กฐํฉ๋ง๋ค ์ต๋๊ฐ ๊ตฌํจ - A์ฌ์ฉ์๋ง ์ถฉ์ ๋ฒ์์ ์์ ๊ฒฝ์ฐ : ListA์ ๋ด๊ธด ์ถฉ์ ๊ธฐ ์ถฉ์ ๋ ์ต๋๊ฐ
- B์ฌ์ฉ์๋ง ์ถฉ์ ๋ฒ์์ ์์ ๊ฒฝ์ฐ : ListB์ ๋ด๊ธด ์ถฉ์ ๊ธฐ ์ถฉ์ ๋ ์ต๋๊ฐ
3. ํด๋น ์ด์ ์ต๋๊ฐ์ด ๋์ค๋ฉด ๋์ ํ์ฌ ๋ํ๋ค. (๊ฒฐ๊ณผ๊ฐ = ์ต๋๊ฐ์ ๋์ ํฉ)
3. ์ฝ๋
import java.util.*;
import java.io.*;
public class SW_5644_๋ฌด์ ์ถฉ์ {
static int M, A, res;
static int[] dirA, dirB;
static BC[] BC;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int T = Integer.parseInt(br.readLine());
for (int t = 1; t <= T; t++) {
st = new StringTokenizer(br.readLine());
M = Integer.parseInt(st.nextToken());
A = Integer.parseInt(st.nextToken());
dirA = new int[M];
dirB = new int[M];
BC = new BC[A];
res = 0;
//1. A์ด๋ ์ ๋ณด ์ ์ฅ
st = new StringTokenizer(br.readLine());
for (int m = 0; m < M; m++) {
dirA[m] = Integer.parseInt(st.nextToken());
}
//2. B์ด๋ ์ ๋ณด ์ ์ฅ
st = new StringTokenizer(br.readLine());
for (int m = 0; m < M; m++) {
dirB[m] = Integer.parseInt(st.nextToken());
}
//3. BC์ ๋ณด ์ ์ฅ
for (int a = 0; a < A; a++) {
st = new StringTokenizer(br.readLine());
BC[a] = new BC(new Point( Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()) ),
Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
} //์
๋ ฅ ๋
solution();
System.out.println("#"+t+" "+res);
}
}
static void solution() {
//1. ์ด๊ธฐ ์ขํ - ์ถฉ์ max ์ฐพ๊ธฐ
Point userA = new Point(1,1);
Point userB = new Point(10,10);
charge(userA, userB);
//2. ์์ง์ - ์ถฉ์ max ์ฐพ๊ธฐ
for (int i = 0; i < M; i++) {
move(userA, dirA[i]);
move(userB, dirB[i]);
charge(userA, userB);
}
}
//๊ทธ ์ด๋ง๋ค ์ต๋๊ฐ์ ๋ํ๊ณ ๊ฐ๋๊ฑฐ์
static void charge(Point userA, Point userB) {
//A์ B ์์น์ ์ ์ ๊ฐ๋ฅํ BC๋ฆฌ์คํธ
List<Integer> ListA = new ArrayList<> ();
List<Integer> ListB = new ArrayList<> ();
//BC๊ฐ์๋งํผ ๋ฐ๋ณต
for (int i = 0; i < A; i++) {
//A์ขํ๊ฐ ๊ฐ๊ฐ BC ๋ฒ์ ์์์๋์ง - ์์ผ๋ฉด ๋ฆฌ์คํธ์ add
if (BC[i].c >= Math.abs( BC[i].point.x - userA.x ) + Math.abs( BC[i].point.y - userA.y ) ) {
ListA.add(i);
}
//B์ขํ๊ฐ ๊ฐ๊ฐ BC ๋ฒ์ ์์์๋์ง - ์์ผ๋ฉด ๋ฆฌ์คํธ์ add
if (BC[i].c >= Math.abs( BC[i].point.x - userB.x ) + Math.abs( BC[i].point.y - userB.y ) ) {
ListB.add(i);
}
}
int max = 0, tmp = 0;
//1. A,B ๋ชจ๋ list์ 1๊ฐ ์ด์์ผ ๋
if ( ListA.size() >= 1 && ListB.size() >= 1 ) {
//๋ชจ๋ ์กฐํฉ์ ๋ด
for (int i : ListA) {
for (int j : ListB) {
tmp = 0;
if (i == j) {
tmp = BC[i].p;
} else {
tmp = (BC[i].p + BC[j].p);
}
max = Math.max( max, tmp );
}
}
}
//2. A list์๋ง 1๊ฐ ์ด์์ผ ๋ (B๋ BC๋ค์ ๋ฒ์์ ์์ ๋)
else if ( ListA.size() >= 1 && ListB.size() == 0 ) {
for (int i : ListA) {
max = Math.max( max, BC[i].p );
}
}
//3. B list์๋ง 1๊ฐ ์ด์์ผ ๋ (A๋ BC๋ค์ ๋ฒ์์ ์์ ๋)
else if ( ListA.size() == 0 && ListB.size() >= 1 ) {
for (int i : ListB) {
max = Math.max( max, BC[i].p );
}
}
res += max;
}
static void move(Point point, int dir) {
int[] dy = {0,-1,0,1,0};
int[] dx = {0,0,1,0,-1};
//์ขํ ์ด๋
point.y += dy[dir];
point.x += dx[dir];
}
static class BC {
Point point;
int c, p;
public BC(Point point, int c, int p) {
this.point = point;
this.c = c;
this.p = p;
}
}
static class Point {
int y, x;
public Point(int x, int y) {
this.y = y;
this.x = x;
}
}
}
'Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SWEA] 14510. ๋๋ฌด ๋์ด - Java (0) | 2022.10.26 |
---|---|
[SWEA] 2115. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฒ๊ฟ์ฑ์ทจ - Java (0) | 2022.10.24 |
[SWEA] 5650. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ํ๋ณผ ๊ฒ์ Java (0) | 2022.10.22 |
[SWEA] 2112. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ณดํธ ํ๋ฆ - Java (0) | 2022.10.18 |
[SWEA] 2383. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ์ ์ฌ ์์ฌ์๊ฐ Java (0) | 2022.10.02 |