최코딩의 개발

[백준 1244번] 스위치 켜고 끄기 본문

코딩테스트/백준

[백준 1244번] 스위치 켜고 끄기

seung_ho_choi.s 2025. 2. 10. 16:53
728x90

https://www.acmicpc.net/problem/1244

 

=begin
1. 스위치입력을 받는다.
2. 이차원리스트로 학생의 정보를 받는다. 받으면서 로직 실행하자 함수로
3. 함수에서는 for문을 활용하여 스위치를 동작하면 될듯 싶다.
=end

N = gets.chomp.to_i
# 스위치 입력
BUTTON = gets.chomp.split.map(&:to_i)

def solution(student)
  number = student[1]
  # 남학생
  if student[0] == 1
    for i in (number..N).step(number)
      if BUTTON[i - 1] == 0
        BUTTON[i - 1] = 1
      else
        BUTTON[i - 1] = 0
      end
    end

    # 여학생
  else
    # 기준 비교 2씩 증가해야됨
    compare = 2
    # 기준 앞으로 탐색
    for j in (number - 1).step(1, -1)
      i = j - 1
      if i + compare >= N
        break
      end
      if BUTTON[i] == BUTTON[i + compare]
        if BUTTON[i] == 0
          BUTTON[i] = 1
          BUTTON[i + compare] = 1
        else
          BUTTON[i] = 0
          BUTTON[i + compare] = 0
        end
        compare += 2
      else
        break
      end

    end

    if BUTTON[number - 1] == 0
      BUTTON[number - 1] = 1
    else
      BUTTON[number - 1] = 0
    end
  end
end

# 학생 입력 받으면서 로직 수행
M = gets.chomp.to_i
M.times do |i|
  student = gets.chomp.split.map(&:to_i)
  solution(student)
end

BUTTON.each_slice(20) { |slice| puts slice.join(" ") }

 

 

문제는 쉬웠다. 여학생일 때는 조금 까다로웠지만, for문을 이용해 값을 감소시키면서 대칭 구조를 맞춰 해결할 수 있었다. 다만, 문제 설명이 다소 부족했고, 특히 출력문이 20줄일 때 줄바꿈 처리가 필요해 어려움을 겪었다. 하지만 이 문제를 통해 for문의 활용을 많이 배울 수 있었다.

728x90

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

[백준 9251번] LCS  (1) 2025.02.27
[백준 1916번] 최소비용 구하기  (0) 2025.02.25
[백준 2503번] 숫자 야구  (0) 2025.02.09
[백준 1966번] 프린터 큐  (0) 2025.02.08
[백준 17413번] 단어 뒤집기 2  (0) 2025.02.08