백준 1244번 스위치 켜고 끄기

이상민·2023년 8월 17일
0

알고리즘

목록 보기
18/128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Switch_On_Off {
    static int[] swit;
    static int cnt;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        cnt = Integer.parseInt(st.nextToken());
        swit = new int[cnt+1];
        st = new StringTokenizer(br.readLine());
        for(int i = 1; i<cnt+1; i++){
            swit[i] = Integer.parseInt(st.nextToken());
        }
        st = new StringTokenizer(br.readLine());
        int humanNum = Integer.parseInt(st.nextToken());
        int sex;
        int num;
        for (int i = 0; i<humanNum; i++) {
            st = new StringTokenizer(br.readLine());
            sex = Integer.parseInt(st.nextToken());
            num = Integer.parseInt(st.nextToken());
            if(sex == 1){
                man(num);
            }
            else if(sex==2){
                woman(num);
            }
        }
        for(int i = 1; i<cnt+1; i++){
            System.out.print(swit[i] + " ");
            if(i%20==0)
                System.out.println();
        }
    }
    public static void man(int num){
        for(int i = 1; num*i<cnt+1; i++){
            if(swit[num*i]==1){
                swit[num*i]=0;
            }
            else if(swit[num*i]==0){
                swit[num*i] = 1;
            }
        }
    }
    public static void woman(int num){
        for(int i = 0; num+i<cnt+1; i++){
            if(num-i<1)
                break;
            if(swit[num+i]==swit[num-i]){
                if(swit[num+i]==1){
                    swit[num+i]=0;
                    swit[num-i]=0;
                }
                else if(swit[num+i]==0){
                    swit[num+i]=1;
                    swit[num-i]=1;
                }
            }
            else {
                break;
            }
        }
    }
}

풀이방법

  1. 입력값에서 남학생인지, 여학생인지 구분해서 로직을 구성한다.
  2. 남학생일때 번호의 배수에 해당하는 스위치값을 바꾼다.
  3. 여학생일때, (내 번호 + i값)과 (내번호 - i값)이 같으면 두 값에 해당하는 스위치값을 바꾼다.(i를 0부터 설정하는것에 주의, 스위치의 범위 밖을 탐색하지 않도록 주의)
  4. 다르면 바로 함수를 종료한다.
  5. 출력값이 20번째에서 줄바꿈을 하도록 출력한다.

후기

  • 스위치 사이에만 빈칸이 있으라고 문제에 나와있었는데, 그럼 마지막 스위치 뒤에는 빈칸이 없어야하는거 아닌가...? 이것때매 뻘짓했네
profile
개린이

0개의 댓글