swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWXRFInKex8DFAUo
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
[ 문제 풀이 ]
이거 진짜 너무 열심히 풀었는데 진짜 하나 .. 후..
기억하자..
map을 TestCase For문 이전에 선언해야 효율성 달성 가능...ㅠㅜㅜㅠㅜ
런타임 에러도 모두 시간 초과 문제이니 확실하게 풀어야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 원자소멸시뮬레이션 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
int[][] map =new int[4002][4002]; //여기 방문한 수
for(int tc = 1; tc<=T; tc++) {
int N = Integer.parseInt(br.readLine());
int[][] Atom = new int[N][4];
for(int i =0; i<N;i++) {
StringTokenizer st =new StringTokenizer(br.readLine());
int x = (Integer.parseInt(st.nextToken())+1000)*2;
int y = (Integer.parseInt(st.nextToken())+1000)*2;
int d = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
Atom[i] = new int[] {x,y, d,k};
map[x][y] =1;
}// 입력 끝
int ans =0;// 합 담아둘 거
boolean[][] col = new boolean[4002][4002]; // 충돌?
for(int time = 0; time<4002 && N>0; time++) {
for(int i =N-1; i>=0; i--) {
int x = Atom[i][0];
int y = Atom[i][1];
map[x][y]--;
//System.out.println(Atom[i]);
switch(Atom[i][2]) {
case 0:
if(y==4000) {
Atom[i] = Atom[N-1];
N--;
break;
}
Atom[i][1]++;
y++;
map[x][y]++;
break;
case 1:
if(y==0) {
Atom[i] = Atom[N-1];
N--;
break;
}
Atom[i][1]--;
y--;
map[x][y]++;
break;
case 2:
if(x==0) {
Atom[i] = Atom[N-1];
N--;
break;
}
Atom[i][0]--;
x--;
map[x][y]++;
break;
case 3:
if(x==4000) {
Atom[i] = Atom[N-1];
N--;
break;
}
Atom[i][0]++;
x++;
map[x][y]++;
break;
}
if(map[x][y]>1) {
col[x][y] = true;
}
}// 충돌하면 map이 개수가 되고
//System.out.println("없어지는거 ");
for(int i =N-1; i>=0; i--) {
int x = Atom[i][0];
int y = Atom[i][1];
if(col[x][y]) {
map[x][y]-=1;
if(map[x][y]==0) {
col[x][y] = false;
}
//System.out.println(Atom[i]);
ans+=Atom[i][3];
Atom[i] = Atom[N-1];
N--;
}
}
//System.out.println(N+"남은거");
}
sb.append('#').append(tc).append(" ").append(ans).append('\n');
}
br.close();
System.out.println(sb);
}
}
'코딩테스트 연습 > SW Expert Academy' 카테고리의 다른 글
[SWEA / 5644번 ] [모의 SW 역량테스트] 무선 충전 (0) | 2020.10.13 |
---|---|
[ SWEA / 2477번 ] [모의 SW 역량테스트] 차량 정비소 - solved by Java (0) | 2020.10.13 |
[ SWEA / 5650번 ] [모의 SW 역량테스트] 핀볼 게임 (0) | 2020.10.12 |
[ SWEA ] 2383. [모의 SW 역량테스트] 점심 식사시간 - JAVA (0) | 2020.10.08 |
[ SWEA ] 2105. [모의 SW 역량테스트] 디저트 카페 - JAVA (0) | 2020.10.07 |