코딩테스트/JAVA 코테

[JAVA] [백준] [실버4] 1244.스위치 켜고 끄기

박소민 2023. 2. 8. 00:41
스위치 켜고 끄기
 

1244번: 스위치 켜고 끄기

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

www.acmicpc.net

 

  • 내 풀이
    • 뭐때문에 통과안되는지 모르겠음....
slen=int(input()) #스위치길이
ls=list(map(int,input().split()))

student=[]
s_num=int(input())

for _ in range(s_num):
    s,m=map(int,input().split())
    k=0
    
    if s==1:
        for i in range(m, slen , m):
            ls[i-1]=1 if ls[i-1]==0 else 0
        print(ls)

    elif s==2:
        l=m-2 #m-1 -1
        r=m  #m-1 +1
      
        while True: #대칭 아닐때까지 - , +
            if l<0 or r>=slen: break
            if ls[l]!=ls[r]: break
            l-=1
            r+=1 
        #대칭 아니어서 while문 나오면 대칭아니었던 인덱스는 되돌려놓기
        l+=1
        r-=1

        while(l<=r): #사이범위 값 변경
            ls[l]=1 if ls[l]==0 else 0
            l+=1
            

for idx, l in enumerate(ls):
    print(l,end=" ")
    if (idx+1)%20==0:
        print()

 

 

  • 다른 사람 자바 풀이
import java.io.IOException;
import java.util.Scanner;

public class JUN1244_ParkSomin {

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt()+1;
        int[] slen = new int[n];

        for (int i = 1; i < n; i++) {
            slen[i] = sc.nextInt();
        }
        int student = sc.nextInt();

        for(int j = 1; j<= student; j++) {
            int sx = sc.nextInt();
            int m = sc.nextInt();

            if(sx == 1) {
                for(int i = m; i<n; i+=m) {
                    slen[i] = slen[i]==0 ? 1:0;
                }
            }

            else if(sx == 2){
                int l = m-1;
                int r = m+1;

                while(true) {//대칭 찾아서
                    if(l<1 || r>= n) break;
                    if(slen[l] != slen[r]) break;
                    l--; r++; //대칭아닐 때까지 - , +
                }
                l++; r--;

                while(l<=r) {
                    slen[l] = slen[l]==0 ? 1:0;
                    l++;
                }
            }
        }

        for (int i = 1; i < n; i++) {
            System.out.print(slen[i]+" ");
            if(i%20==0) System.out.println();
        }

    }
}

'코딩테스트 > JAVA 코테' 카테고리의 다른 글

[백준] 1759. 암호만들기  (0) 2023.02.25
[백준] [BFS] [Union-Find] 2606.바이러스  (0) 2023.02.24
머쓱이보다 키큰 사람  (0) 2023.02.07
특정 문자 제거하기  (0) 2023.02.07
아이스 아메리카노  (0) 2023.02.06