자바로 백준 1244 풀기

hong030·2023년 9월 1일
0

풀이)
남학생이면 스위치 번호의 배수 스위치의 상태를 전부 바꿔주고,

여학생이면 스위치의 대칭여부를 비교해가며 상태를 바꿔준다.

내 코드)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int total = Integer.parseInt(br.readLine()); //스위치의 개수
		int[] switches = new int[total];
		StringTokenizer st = new StringTokenizer(br.readLine()); //스위치 string 받음
		for(int i=0; i<total; i++)
			switches[i] = Integer.parseInt(st.nextToken());
		
		int stuCnt = Integer.parseInt(br.readLine()); //학생의 명수
		for(int i=0; i<stuCnt; i++) {
			st = new StringTokenizer(br.readLine());
			int gender = Integer.parseInt(st.nextToken());
			int number = Integer.parseInt(st.nextToken());
			
			//남학생이면
			if(gender == 1) {
				for(int j=0; j<total; j++) //뽑은 수의 배수 위치에 있는 스위치의 상태를 바꾼다.
					if((j+1) % number == 0)
						switches[j] = switches[j] == 0? 1: 0;
			}
			//여학생이면
			else {
				//뽑은 수를 중심으로 좌우가 대칭이면 상태를 바꾼다.
				switches[number - 1] = switches[number - 1] == 0 ? 1 : 0;
				for(int j=1; j<total/2; j++) {
					if(number - 1 + j >= total || number - 1 - j < 0)
						break;
					if(switches[number - 1 - j] == switches[number - 1 + j]) {
						switches[number - 1 - j] = switches[number - 1 - j] == 0 ? 1 : 0;
						switches[number - 1 + j] = switches[number - 1 + j] == 0 ? 1 : 0;
					}
					else break; //대칭 아닌것이 나오면 바로 끝낸다.
				}
			}
		}
		
		//한 줄에 20개씩 출력
		for(int i=0; i<total; i++) {
			System.out.print(switches[i] + " ");
			if((i+1) % 20 == 0)
				System.out.println();
		}
	}
}
profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글