본문 바로가기
Problem Solving/BOJ

백준 -1244 스위치 켜고 끄기

by 채니_ 2021. 2. 6.

www.acmicpc.net/problem/1244

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net


Math.abs() 메소드 활용 1->0  & 0->1로 바꿈

|0 -1| =| -1| -> 1

|1 -1| = |0 | -> 0


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) throws FileNotFoundException {
		//System.setIn(new FileInputStream("input/switch.txt"));
		Scanner sc = new Scanner(System.in);
		int switchNum = sc.nextInt();
		int [ ] arr = new int [switchNum];
		for (int i = 0; i < switchNum; i++) {
			arr[i] = sc.nextInt();
		}
		int studentNum = sc.nextInt();
		for (int i = 0; i < studentNum; i++) {
			int sex = sc.nextInt();
			//남학생일경우 자신이 받은수의 배수의 번호를 반대로 바꿈.
			if(sex==1) {
				int num = sc.nextInt();
				for (int j = 1; j <= arr.length; j++) {
					if(j%num==0) {
						arr[j-1] = Math.abs(arr[j-1]-1);
					}
				}
			}//여학생일경우 앞뒤체크하여 같으면 변경. 마지막엔 자신을 변경
			else {
				int num2= sc.nextInt()-1;//여학생의 배열 인덱스
				boolean flag = true;
				int d=1;
				while(flag) {
						if(num2-d>=0&&num2+d<switchNum&&arr[num2-d]==arr[num2+d]) {
							arr[num2-d] = Math.abs(arr[num2-d]-1);
							arr[num2+d] = Math.abs(arr[num2+d]-1);
							d++;
						}
						else {
							flag = false;
						}
				}
				arr[num2]= Math.abs(arr[num2]-1);
				
			}	
			//학생수만큼 반복
		}
		int cnt=0;
		for (int i = 0; i < arr.length; i++) {
			if(cnt>0&&cnt%20==0) System.out.println();
			System.out.print(arr[i]+" ");
			cnt++;
		}
	}

}

출력형식 때문에 계속 틀렸었다.

출력시 20개가 넘어가면 줄바꿈 해야함. 

조건에 cnt%20 ==0 에 cnt>0도 추가해야 0번째일때부터 줄바꿈이 일어나지 않음. 

'Problem Solving > BOJ' 카테고리의 다른 글

백준 - 8320 직사각형을 만드는 방법  (0) 2021.02.07
백준- 15652번 N과M (4)  (0) 2021.02.07
백준- 15651번 N과M (3)  (0) 2021.02.07
백준 -15650번 N과M(2)  (0) 2021.02.07
백준 - 15649 N과 M(1)  (0) 2021.02.07

댓글