728x90
https://www.acmicpc.net/problem/2564
2564๋ฒ: ๊ฒฝ๋น์
์ฒซ์งธ ์ค์ ๋ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด์ ์ธ๋ก์ ๊ธธ์ด๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ ์์ ์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ๋ธ๋ก์ ๊ฐ๋ก์ ๊ธธ์ด์ ์ธ๋ก์ ๊ธธ์ด, ์์ ์ ๊ฐ์๋ ๋ชจ๋ 100์ดํ์ ์์ฐ์์ด๋ค. ์ด์ด ํ ์ค
www.acmicpc.net
๋๋ฌด๋๋ฌด ํท๊ฐ๋ฆฌ๋ ๋ฌธ์ ์๋ฐ...
1. ๊ฐ ์์ ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ ๋๋ง๋ค,
๊ฐ ์์ ์ ์์ ๊ธฐ์ค ์๊ณ๋ฐฉํฅ ๊ฑฐ๋ฆฌ์ ๋ฐ์๊ณ๋ฐฉํฅ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ ์ ์ฅํด๋๋๋ค.
2. ๋๊ทผ์ด์ ์์น๋ฅผ ์ ๋ ฅ๋ฐ๊ณ ,
1์์ ์ ๋ ฅํด๋ ์ ๋ณด๋ค์ ๊ฐ์ง๊ณ ๊ฒฝ์ฐ์ ์๋ฅผ ๋๋์ด์ ์์ ๋ณ๋ก ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] line = reader.readLine().split(" ");
int w = Integer.parseInt(line[0]);
int h = Integer.parseInt(line[1]);
int n = Integer.parseInt(reader.readLine());
int[][] distFromOrigin = new int[n][3];
for (int i=0; i<n; i++){
line = reader.readLine().split(" ");
int direction = Integer.parseInt(line[0]);
int distance = Integer.parseInt(line[1]);
int left = 0;
int right = 0;
switch(direction){
case 1:
left = h + distance;
right = w + h + (w-distance);
break;
case 2:
left = h + w + h + (w-distance);
right = distance;
break;
case 3:
left = h-distance;
right = w + h + w + distance;
break;
case 4:
left = h + w + distance;
right = w + (h-distance);
break;
}
distFromOrigin[i][0] = left; // ์์ ์ผ๋ก๋ถํฐ ๋ฐ์๊ณ๋ฐฉํฅ ๊ฑฐ๋ฆฌ
distFromOrigin[i][1] = right; // ์์ ์ผ๋ก๋ถํฐ ์๊ณ๋ฐฉํฅ๊ฑฐ๋ฆฌ
distFromOrigin[i][2] = direction; // ์์ ์ด ์์นํ ๋ฐฉํฅ
}
// ๋๊ทผ์ด์ ์์น
line = reader.readLine().split(" ");
int direction = Integer.parseInt(line[0]);
int distance = Integer.parseInt(line[1]);
int left = 0; // ์์ ์ผ๋ก๋ถํฐ ๋ฐ์๊ณ๋ฐฉํฅ ๊ฑฐ๋ฆฌ
int right = 0; // ์์ ์ผ๋ก๋ถํฐ ์๊ณ๋ฐฉํฅ ๊ฑฐ๋ฆฌ
int answer = 0;
switch(direction){
case 1:
left = h + distance;
right = w + h + (w-distance);
for (int i=0; i<n; i++){
int dir = distFromOrigin[i][2];
switch (dir){
case 1:
answer += Math.abs(left - distFromOrigin[i][0]);
break;
case 2:
answer += Math.min(right - distFromOrigin[i][1], left + distFromOrigin[i][1]);
break;
case 3:
answer += left - distFromOrigin[i][0];
break;
case 4:
answer += distFromOrigin[i][1] - right;
break;
}
}
break;
case 2:
left = h + w + h + (w-distance);
right = distance;
for (int i=0; i<n; i++){
int dir = distFromOrigin[i][2];
switch (dir){
case 1:
answer += Math.min(right + distFromOrigin[i][0], distFromOrigin[i][1] - right);
break;
case 2:
answer += Math.abs(right - distFromOrigin[i][1]);
break;
case 3:
answer += right + distFromOrigin[i][0];
break;
case 4:
answer += distFromOrigin[i][1] - right;
break;
}
}
break;
case 3:
left = h - distance;
right = w + h + w + distance;
for (int i=0; i<n; i++){
int dir = distFromOrigin[i][2];
switch (dir){
case 1:
answer += distFromOrigin[i][0] - left;
break;
case 2:
answer += left + distFromOrigin[i][1];
break;
case 3:
answer += Math.abs(left - distFromOrigin[i][0]);
break;
case 4:
answer += Math.min(distFromOrigin[i][0] - left, left + distFromOrigin[i][1]);
break;
}
}
break;
case 4:
left = h + w + distance;
right = w + (h-distance);
for (int i=0; i<n; i++){
int dir = distFromOrigin[i][2];
switch (dir){
case 1:
answer += left - distFromOrigin[i][0];
break;
case 2:
answer += right - distFromOrigin[i][1];
break;
case 3:
answer += Math.min(left - distFromOrigin[i][0],right + distFromOrigin[i][0]);
break;
case 4:
answer += Math.abs(right - distFromOrigin[i][1]);
break;
}
}
break;
}
System.out.println(answer);
}
}
728x90
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > ๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ์๋ฅผ ๋์ ํ์ผ๋ก ๋ฐฐ์นํ๊ธฐ (0) | 2023.10.10 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณต์ ์ฐ์ฑ (0) | 2023.09.18 |
[๋ฐฑ์ค]21921๋ฒ: ๋ธ๋ก๊ทธ (0) | 2023.08.11 |
[๋ฐฑ์ค]2304๋ฒ: ์ฐฝ๊ณ ๋ค๊ฐํ (0) | 2023.08.11 |
[๋ฐฑ์ค]14719๋ฒ: ๋น๋ฌผ (0) | 2023.08.01 |