알고리즘/SWEA

[SWEA]모의 4013 특이한 자석

  • -

이 문제는 백준 G5 14891 톱니바퀴와 같은 문제입니다.

 

SW Expert Academy

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

14891번: 톱니바퀴 (acmicpc.net)

 

14891번: 톱니바퀴

첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터

www.acmicpc.net

* 일단 문제를 정독 하고 1시간 이상 반드시 고민이 필요합니다.

 

1시간 이상 고민 했지만 아이디어가 떠오르지 않는다면 동영상에서 약간의 힌트를 얻어봅시다.

 

동영상 설명을 보고도 전혀 구현이 안된다면 연습 부족입니다.
소스를 보고 작성해 본 후 스스로 백지 상태에서 3번 작성해 볼 의지가 있다면 소스를 살짝 보세요.

꼭 작성할 각오가 되어있습니다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.LinkedList; import java.util.List; import java.util.StringTokenizer; public class Main { static BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); static StringBuilder output = new StringBuilder(); static StringTokenizer tokens = null; static int T, K; private static List<Integer>[] gears = new List[5]; public static void main(String[] args) throws IOException { T = Integer.parseInt(input.readLine()); for (int t = 1; t <= T; t++) { K = Integer.parseInt(input.readLine()); for (int i = 1; i < gears.length; i++) { gears[i] = new LinkedList<>(); tokens = new StringTokenizer(input.readLine()); while (tokens.hasMoreTokens()) { gears[i].add(Integer.parseInt(tokens.nextToken())); } } for (int k = 0; k < K; k++) { tokens = new StringTokenizer(input.readLine(), " "); int gearNo = Integer.parseInt(tokens.nextToken()); int dir = Integer.parseInt(tokens.nextToken()); int[] turnMap = new int[5]; turnMap[gearNo] = dir; effectRight(gearNo, dir, turnMap); effectLeft(gearNo, dir, turnMap); for(int i=1; i<turnMap.length; i++) { int turnDir = turnMap[i]; if(turnDir==1) { gears[i].add(0, gears[i].remove(7)); } else if(turnDir==-1) { gears[i].add(gears[i].remove(0)); } } } int answer = 0; for (int i = 1; i < gears.length; i++) { answer += gears[i].get(0) * Math.pow(2, i - 1); } output.append("#").append(t).append(" ").append(answer).append("\n"); } System.out.println(output); } private static void effectRight(int gearNo, int dir, int[] turnMap) { if (gearNo == 4) { return; } if (gears[gearNo].get(2) != gears[gearNo + 1].get(6)) { turnMap[gearNo + 1] = dir * -1; effectRight(gearNo + 1, dir * -1, turnMap); } } private static void effectLeft(int gearNo, int dir, int[] turnMap) { if (gearNo == 1) { return; } if (gears[gearNo].get(6) != gears[gearNo - 1].get(2)) { turnMap[gearNo - 1] = dir * -1; effectLeft(gearNo - 1, dir * -1, turnMap); } } }

 

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.