문제 출처 : https://www.acmicpc.net/problem/1244
문제
설명
조건이 많지만 로직 자체는 복잡하지 않아서, 그 조건을 하나씩 구현하기만 하면 되는 문제였습니다.
다만 bit flip시킬 때마다 조건문을 반복적으로 쓰지 않고, 삼항 연산자만으로 간단하게 표현이 가능하다는 게 포인트였습니다.
코드
//기억할 것 : bit flip 으로 " ? : " 연산자 활용 가능!
import java.util.Scanner;
public class BOJ1244_light {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
int n = sc.nextInt();
int[] lights = new int[n+1];
for (int i = 1; i < lights.length; i++) { //스위치 번호는 1번부터 시작한다.
lights[i]=sc.nextInt();
}
int student_num = sc.nextInt();
for(int i=0; i<student_num; i++) {
int gender = sc.nextInt();
int num = sc.nextInt(); //학생이 받은 수
if(gender==1) { //학생이 남자이면
for (int j = 1; j < lights.length; j++) {
if(j%num==0) { //배수이면
lights[j] = lights[j]==0 ? 1 : 0; // bit flip : 삼항 연산자 활용!!!
}
}
}
else { // 학생이 여자이면
lights[num] = lights[num] == 1 ? 0 : 1;
int a=1;
while(num-a>=1 && num+a<lights.length) { //num을 기준으로 한 대칭을 살핌
if(lights[num-a]-lights[num+a]==0) {
lights[num-a] = lights[num-a] == 1 ? 0 : 1;
lights[num+a] = lights[num+a] == 1 ? 0 : 1;
a++;
}
else
break;
}
}
}
for (int i = 1; i < lights.length; i++) {
if(i==21 || i==41 || i==61 || i==81)
System.out.println();
System.out.printf("%d ", lights[i]);
}
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[BOJ][JAVA]2493 - 탑 (0) | 2021.08.20 |
---|---|
[BOJ][JAVA]17478번 - 재귀함수가 뭔가요? (0) | 2021.08.16 |
[BOJ][JAVA]2961 - 도영이가 만든 맛있는 음식 (0) | 2021.08.12 |
[BOJ][JAVA]2563 - 색종이 (0) | 2021.08.11 |
[BOJ][JAVA]11866 - 요세푸스 문제 0 (0) | 2021.08.10 |