최코딩의 개발
[백준 1244번] 스위치 켜고 끄기 본문
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 |