코딩테스트 연습 스터디 진행중 입니다. ✍✍✍
Notion : https://www.notion.so/1c911ca6572e4513bd8ed091aa508d67
문제
https://www.acmicpc.net/problem/1244
[나의 풀이]
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
// 0 <=> 1 변환
static int one_zero_parser(int one_or_zero) {
// 2 % (1+1) => result = 0
// 2 % (0+1) => result = 1
int result = (one_or_zero + 1) % 2;
return result;
}
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int[] switches = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
switches[i] = Integer.parseInt(st.nextToken());
}
// 학생 수
int std_num = Integer.parseInt(br.readLine());
// 학생 수 만큼 반복
for (int i = 0; i < std_num; i++) {
st = new StringTokenizer(br.readLine());
// 성별
int gender = Integer.parseInt(st.nextToken());
// 번호
int number = Integer.parseInt(st.nextToken());
// 남자일 때
if (gender == 1) {
for (int j = number; j < n; j += (number)) {
switches[j - 1] = one_zero_parser(switches[j - 1]);
}
}
// 여자일 때
else {
switches[number - 1] = one_zero_parser(switches[number - 1]);
// 번호가 중간 이상 or 이하인지 확인
boolean higher = false;
if (number > n / 2) {
higher = true;
}
// 여자의 숫자에서 점점 퍼짐
int gap = 0;
// 중간 이상 일때
if (higher) {
while (number + gap < n) {
gap++;
if (switches[number + gap - 1] == switches[number - gap - 1]) {
switches[number + gap - 1] = one_zero_parser(switches[number + gap - 1]);
switches[number - gap - 1] = one_zero_parser(switches[number - gap - 1]);
} else {
break;
}
}
}
// 중간 이하일때
else {
while (number + gap > 1) {
gap--;
if (switches[number + gap - 1] == switches[number - gap - 1]) {
switches[number + gap - 1] = one_zero_parser(switches[number + gap - 1]);
switches[number - gap - 1] = one_zero_parser(switches[number - gap - 1]);
} else {
break;
}
}
}
}
}
// 출력
for (int i = 0; i < n; i++) {
if (i != 0 && i % 20 == 0) {
bw.write("\n");
}
bw.write(switches[i] + " ");
}
bw.flush();
}
}
[팀원의 풀이]
# coding = utf-8
import sys
input = sys.stdin.readline
n = int(input())
switch = list(map(int, input().split()))
m = int(input())
def changeswitch(idx):
if switch[idx] == 0:
switch[idx] = 1
else:
switch[idx] = 0
def boy(number):
idx = number-1
while idx<n:
changeswitch(idx)
idx += number
def girl(number):
idx = number-1
changeswitch(idx)
l, r = idx-1, idx+1
while l>=0 and r<n and switch[l] == switch[r]:
changeswitch(l)
changeswitch(r)
l -= 1
r += 1
def sol(gender, number):
if gender == 1:
boy(number)
else:
girl(number)
def printswitch():
idx = 0
for number in switch:
print(number, end=" ")
idx += 1
if idx % 20 == 0:
print()
for _ in range(m) :
g, num = map(int, input().split())
sol(g, num)
printswitch()
입력에 맞는 스위치 On/Off 문제입니다.
문제 자체는 이해하는 데에 어렵진 않았습니다.🐳🐳🐳
하지만 문제에서 요구하는 출력 시의 조건 '스위치의 상태를 1번 스위치에서 시작하여 마지막 스위치까지 한 줄에 20개씩 출력한다. 예를 들어 21번 스위치가 있다면 이 스위치의 상태는 둘째 줄 맨 앞에 출력한다. 켜진 스위치는 1, 꺼진 스위치는 0으로 표시하고, 스위치 상태 사이에 빈칸을 하나씩 둔다.' 를 제대로 읽지 않아서 '출력 형식이 잘못되었습니다' 메세지가 떴고 이 때문에 시간이 오래걸렸습니다..😥😥😥
앞으로 문제에서 요구하는 조건들을 꼼꼼히 읽어보고 풀기 시작하는 습관을 들여보도록 하겠습니다...
감사합니다!!!💐💐💐
⛄