일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- SSAFY 테스트
- SSAFY 화이팅
- 수학
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- 네트워크
- Have a good day :)
- I am Korean
- 코로나 싫어요
- 텐션 업 10기 화이팅
- 우유아야
- 우유가옆으로넘어지면아야
- 아자아자 화이팅
- Have a nice day.
- HAVE A GOOD DAY
- 우유가 옆으로 넘어지면 아야
- have a nice day
- 자료구조
- amazon
- 모르고리즘
- Java 환경 설정
- SeongSeobDang
- DP
- BFS
- Hamming weight
- DFS
- 자고 싶다
- SSAFY 10기 화이팅
- 텐션 업 10기!
- SSAFY IM/A
- Today
- Total
Hope Everyone Is Happy
[실버4] 1244. 스위치 켜고 끄기(Java) 본문
[실버4] 1244. 스위치 켜고 끄기(Java)
J 크 2023. 8. 21. 15:53https://www.acmicpc.net/problem/1244
1244번: 스위치 켜고 끄기
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩
www.acmicpc.net
화이팅 ★★★★★
※ 문제를 요약하면 아래와 같습니다.
▶ 스위치 1~N까지 N개가 존재
▶ N개의 스위치가 존재 할 때, 스위치를 컨트롤하는 학생 수 S명이 주어짐
▶ 학생에게는 스위치의 번호가 주어지며 남자/여자에 따라 스위치 컨트롤이 다름
▶ 남자는 주어진 스위치의 번호의 배수 스위치를 반대로 변경
▶ 여자는 주어진 스위치의 번호를 기준으로 양 옆의 스위치 상태가 다를 때 까지 스위치들을 반대로 변경
▶ Input : 첫째줄에 스위치 개수
둘째줄에 스위치들의 상태
셋째줄에 학생 수
각 줄별로 학생의 성별 (남자:1/여자:2) 과 스위치번호가 주어짐
▶ Output : 변경 후 스위치 상태를 각 줄별로 최대 20개씩 출력
◈ Input
8
0 1 0 1 0 0 0 1
2
1 3
2 3
◈ Output
1 0 0 0 1 1 0 1
◎ 코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.
▶ 스위치들의 상태는 boolean 배열로 선언
▶ 남자일 경우, 주어진 스위치의 번호의 배수번호만 스위치의 상태를 반대로 변경
▶ 여자일 경우, 스위치 넘버에 해당하는 스위치 값 변경우 LeftPoint, RightPoint의 스위치 일치 여부 비교 탐색
▶ LeftPoint와 RightPoint의 스위치 값이 일치할 경우 변경, 아닐 경우 탐색 종료
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 {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(System.out));
int nSwitchSize = Integer.parseInt(bReader.readLine());
boolean[] barrSwitch = new boolean[nSwitchSize];
StringTokenizer st = new StringTokenizer(bReader.readLine());
for(int i = 0 ; i < barrSwitch.length; i++)
barrSwitch[i] = Integer.parseInt(st.nextToken()) == 1;
int nStudent = Integer.parseInt(bReader.readLine());
for(int i = 0 ; i < nStudent; i++) {
st = new StringTokenizer(bReader.readLine());
int nGender = Integer.parseInt(st.nextToken());
int nSwitchNum = Integer.parseInt(st.nextToken());
int nMan = 1;
int nWoman = 2;
if(nGender == nMan) {
for(int j = 0; j < barrSwitch.length; j++) {
if((j+1) % nSwitchNum == 0)
barrSwitch[j] = !barrSwitch[j];
}
} else if(nGender == nWoman) {
nSwitchNum--;
barrSwitch[nSwitchNum] = !barrSwitch[nSwitchNum];
int nLeftPoint = nSwitchNum-1;
int nRightPoint = nSwitchNum+1;
while(nLeftPoint >= 0 && nRightPoint < nSwitchSize) {
if(barrSwitch[nLeftPoint] != barrSwitch[nRightPoint])
break;
barrSwitch[nLeftPoint] = !barrSwitch[nLeftPoint];
barrSwitch[nRightPoint] = !barrSwitch[nRightPoint];
nLeftPoint--;
nRightPoint++;
}
}
}
for(int i = 0 ; i < nSwitchSize; i++) {
if(barrSwitch[i])
bWriter.write("1 ");
else
bWriter.write("0 ");
if(i != 0 && (i+1) % 20 == 0)
bWriter.write("\n");
}
bWriter.flush();
bWriter.close();
}
}
읽어주셔서 감사합니다!
Good Luck! (피드백 감사합니다!)
'※ 백준 (Baekjoon) > [Java] 문제 풀이 ( Solve the problems)' 카테고리의 다른 글
[실버1] 2527. 직사각형 (Java) (0) | 2023.08.23 |
---|---|
[실버2] 2477. 참외밭 (Java) (0) | 2023.08.22 |
[실버3] 15649. N과 M(2) (Java) (0) | 2023.08.20 |
[실버3] 15649. N과 M(1) (Java) (0) | 2023.08.20 |
[골드4] 9963. N-Queen (Java) (2) | 2023.08.20 |