728x90
시뮬레이션 문제 남학생 여학생인지 확인해서 완전 탐색을 하는 문제이다 이 문제의 시간 복잡도는 스위치 개수와 학생의 수를 곱한 100*100=1만이다.
문제 풀이
- 남학생 여학생의 경우를 판단
- 남학생일 경우 배수만큼 이동하면서 바꿔주기
- 여학생일 경우 그점을 기준으로 양옆으로 가면서 확인
이 문제에서는 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 |