본문 바로가기

IM대비

백준 1244 <스위치 켜고 끄기>

728x90

시뮬레이션 문제 남학생 여학생인지 확인해서 완전 탐색을 하는 문제이다 이 문제의 시간 복잡도는 스위치 개수와 학생의 수를 곱한 100*100=1만이다.

 

문제 풀이

  1. 남학생 여학생의 경우를 판단
  2. 남학생일 경우 배수만큼 이동하면서 바꿔주기
  3. 여학생일 경우 그점을 기준으로 양옆으로 가면서 확인

이 문제에서는 System.out.print() 를 사용하는 시간을 줄이기 위해 StringBuilder를 사용해 시간을 단축했다.

 

전체 코드

더보기
package asd;

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

public class sad {

	static int num,state[],stnum;
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader (System.in));
		num=Integer.parseInt(br.readLine());
		state=new int[num];
		StringTokenizer st=new StringTokenizer(br.readLine());
		for(int i=0;i<num;i++) {
			state[i]=Integer.parseInt(st.nextToken());
		}
		stnum=Integer.parseInt(br.readLine());
		for(int i=0;i<stnum;i++) {
			st=new StringTokenizer(br.readLine());
			int who=Integer.parseInt(st.nextToken());
			int what=Integer.parseInt(st.nextToken());
			if(who==1) {
				godouble(what);
			}
			else {
				goside(what-1);
			}
		}
		StringBuilder sb=new StringBuilder();
		for(int i=0;i<num-1;i++) {
			sb.append(state[i]);
			if(i%10==9) {
				sb.append("\n");
			}
			else
				sb.append(" ");
		}
		sb.append(state[num-1]);
		System.out.println(sb.toString());
	}
	private static void goside(int what) {
		// TODO Auto-generated method stub
		change(what);
		int l=what-1;
		int r=what+1;
		while(true) {
			if(l<0||r>=num||state[l]!=state[r])
				break;
			change(l);
			change(r);
			l-=1;
			r+=1;
		}
	}
	private static void godouble(int what) {
		// TODO Auto-generated method stub
		for(int i=what-1;i<num;i+=what) {
			change(i);
		}
	}
	private static void change(int what) {
		// TODO Auto-generated method stub
		if(state[what]==0) {
			state[what]=1;
		}else {
			state[what]=0;
		}
	}

}

'IM대비' 카테고리의 다른 글

백준 2116 <주사위쌓기>  (0) 2020.09.21
백준 2628 <종이자르기>  (0) 2020.09.21
백준 2635 <수 이어가기>  (0) 2020.09.20
백준 2669 <직사각형 네개의 합집합의 면적 구하기>  (0) 2020.09.20
백준 10157 <자리배정>  (0) 2020.09.20