https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWIeV9sKkcoDFAVH
풀이
- 먼저 각 자석의 자성 정보를 배열에 저장한다.
- 입력받은 K번만큼 실행
- 회전시킬 자석 번호와 방향을 입력받는다.
- 처음 상태에 따라서 회전할지 안 할지가 결정되므로 미리 회전방향을 배열에 저장해놓는다.
- 회전시킬 자석의 오른쪽과 왼쪽의 자석들을을 각각 순차적으로 검사한다.
- 앞의 자석의 2번째 날과 뒤의 자석의 6번째 날을 비교한다.
- 같으면 그쪽 방향의 자석들은 회전하지 않을 것이므로 break
- 다르면 현재 회전하는 자석의 반대 방향으로 회전 방향을 저장한다.
- 각 자석을 위에서 저장한 회전 정보를 이용하여 회전시켜준다.
- 0인 경우는 회전하지 않는 자석
- 1인 경우는 시계방향 회전
- -1인 경우는 반시계 방향 회전
- K번만큼의 회전이 끝난 후에 총점을 계산해준다.
- 1,2,4,8 순으로 점수가 늘어나므로 left shift (<<) 연산을 사용해서 sum 변수에 더해줬다.
import java.io.*; import java.util.StringTokenizer; public class Solution { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); StringTokenizer st; for(int tc=1; tc<=T; tc++) { int K = Integer.parseInt(br.readLine()); int[][] info = new int[4][8]; for(int i=0; i<4; i++) { st = new StringTokenizer(br.readLine()); for(int j=0; j<8; j++) { info[i][j] = Integer.parseInt(st.nextToken()); } } //명령을 K번 실행 for(int i=0; i<K; i++) { st = new StringTokenizer(br.readLine()); int num = Integer.parseInt(st.nextToken())-1; int dir = Integer.parseInt(st.nextToken()); int[] rotation = new int[4]; //회전할 방향을 저장 rotation[num] = dir; //오른쪽 자석들을 검사 for(int j=num+1; j<4; j++) { if(info[j-1][2] == info[j][6]) //자성이 같으면 회전하지 않는다. break; else rotation[j] = -rotation[j-1]; } //왼쪽 자석들을 검사 for(int j=num-1; j>=0; j--) { if(info[j][2] == info[j+1][6]) //자성이 같으면 회전하지 않는다. break; else rotation[j] = -rotation[j+1]; } //각 자석을 회전시킨다. for(int j=0; j<4; j++) { if(rotation[j] == 0) continue; //회전하지 않는 경우 else if(rotation[j] == 1) { // 시계방향 회전 int tmp = info[j][7]; for(int k=7; k>0; k--) { info[j][k] = info[j][k-1]; } info[j][0] = tmp; } else if(rotation[j] == -1) { // 반시계방향 회전 int tmp = info[j][0]; for(int k=0; k<7; k++) { info[j][k] = info[j][k+1]; } info[j][7] = tmp; } } } //모든 실행이 끝난 후 총합을 계산 int sum = 0; for(int i=0; i<4; i++) { if(info[i][0] == 1) { sum += 1<<i; } } System.out.println("#"+tc+" "+sum); } } }
'SWEA > 모의 SW 역량테스트(JAVA)' 카테고리의 다른 글
[SWEA] 2112. [모의 SW 역량테스트] 보호 필름 (0) | 2019.05.24 |
---|---|
[SWEA] 2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2019.05.20 |
[SWEA] 5644. 무선 충전 (0) | 2019.05.10 |
[SWEA] 5656. 벽돌 깨기 (0) | 2019.05.10 |
[SWEA] 2117. 홈 방범 서비스 (0) | 2019.05.09 |