광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 티스토리챌린지
  • 알고리즘
  • 오블완
  • 합주
  • 드린이
  • 구현
  • 개념
  • 운영체제
  • OS
  • DP
  • BFS
  • 애플워치 앱 만들기
  • 프로그래머스
  • 다이나믹 프로그래밍
  • 애플워치 앱
  • 파이썬
  • 백준
  • BOJ
  • 자바
  • 컴퓨터 사이언스

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[Java/자바 swea 4013] 특이한 자석

2021. 10. 1. 15:50
반응형

풀이

처음 스택을 쓰려고 했는데 엄청 복잡했습니다...

 

그래서 2차원 배열을 통해 구현했습니다.

map 4x8 2차원 형태로 저장하구 , arr에 시계면 1, 반시계면 -1, 회전 하지않는다면 0 으로 담았습니다.

 

받은 인덱스 값을 바탕으로 왼쪽,오른쪽을 나눈 뒤

오른쪽일 땐, map[idx][6]번과 map[idx-1][2] 을 비교해준 뒤 값을 arr 를 넣어주고

왼쪽도 비슷한 로직으로 arr 넣어줍니다.

 

arr를 기준으로

시계,반시계로 돌려줍니다

시계방향은 끝에 있는 값을 처음으로 넣어줍니다.

반시계방향은 처음 값을 마지막으로 넣어줍니다.

 

풀이 완료!!

import java.io.*;
import java.util.*;

public class Solution {
	static int[][] map;
	static int[] arr; 
	
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int tc=Integer.parseInt(br.readLine());
		for(int t=1 ; t<=tc ; t++) {
			map = new int[4][8];
			
		
			int k= Integer.parseInt(br.readLine());
			
			for(int i=0; i<4; i++) {
				st=new StringTokenizer(br.readLine());
				for(int j=0; j<8; j++) {
					map[i][j]=Integer.parseInt(st.nextToken());
				}
			}
			
			for(int i=0; i<k ; i++) {
				arr= new int[4];
				st = new StringTokenizer(br.readLine(), " ");
				int idx =Integer.parseInt(st.nextToken())-1;
				int dir=Integer.parseInt(st.nextToken());
				do_rotate(idx,dir);
			}
			
			int total=0;
			
			if(map[0][0]==1) total+=1;
			if(map[1][0]==1) total+=2;
			if(map[2][0]==1) total+=4;
			if(map[3][0]==1) total+=8;
			System.out.println("#"+t+" "+total);
			
		}
	}

	private static void do_rotate(int idx, int dir) {
		// TODO Auto-generated method stub
		arr[idx]=dir;
		
		// 오른쪽
		for(int i=idx+1 ; i<4 ; i++) {
			if(map[i][6]==map[i-1][2]) {
				break;
			}
			else arr[i]= -arr[i-1];
		}
		
		//왼쪽
		for(int i=idx-1 ; i>=0 ; i--) {
			if(map[i+1][6] == map[i][2]) {
				break;
			}
			else arr[i] = -arr[i+1];
		}
		
		// 돌리기
		for(int i=0; i<4; i++) {
			if(arr[i]==0) continue;
			// 시계
			else if(arr[i] == 1) {
				int tmp=map[i][7];
				for(int j=7 ; j>0 ;j--) {
					map[i][j]=map[i][j-1];
				}
				map[i][0]=tmp;
			}
			// 반시계
			
			else if(arr[i] == -1) {
				
				int tmp=map[i][0];
				for(int j=0; j<7 ; j++) {
					map[i][j]=map[i][j+1];
				}
				map[i][7]=tmp;
			}
		}
		
	}


}

인덱스 값을 헷갈리지 않게 조심합시다!!

반응형
저작자표시 (새창열림)

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[Java/자바 swea 5648] 원자 소멸 시뮬레이션  (0) 2021.10.13
[Java/자바 swea 5653] 줄기세포배양  (0) 2021.10.11
[Java/자바 swea 1868] 파핑파핑 지뢰찾기  (0) 2021.10.01
[Java/자바 swea 5643] 키 순서  (0) 2021.09.30
[Java/자바 swea 8458] 원점으로 집합  (0) 2021.09.29
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [Java/자바 swea 5648] 원자 소멸 시뮬레이션
    • [Java/자바 swea 5653] 줄기세포배양
    • [Java/자바 swea 1868] 파핑파핑 지뢰찾기
    • [Java/자바 swea 5643] 키 순서
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바