Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- mobaXTerm
- 자바
- 1697 자바
- ubuntu
- 1389 JAVA
- 백준 1389 자바
- 백준 1697 자바
- 노트북 서버
- Ubuntu USB부팅
- 퇴사
- BFS
- 5430자바
- 백준 유기농 배추
- 1012 java
- React Native
- 백준 1012 자바
- 백준 1012 java
- 백준
- 1389자바
- 백준 5430자바
- 알고리즘
- Expo
- 5430 java
- 1012 자바
- 백준 2615
Archives
- Today
- Total
삽질메모장
백준 1244번: 스위치 켜고 끄기(java) 본문
문제
https://www.acmicpc.net/problem/1244
1244번: 스위치 켜고 끄기
첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩
www.acmicpc.net
접근법
binary 한 데이터 배열들을 입력 받으면 boolean 으로 변환하는 것을 고려해봐야한다.
이 경우에도 1, 0의 데이터를 직접 입력 할 필요없이 boolean으로 상태값에 not 연산을 하여 변경해주는것이 깔끔하게 쓰기 좋다.
(1) 1, 0 을 각각 true false 로 배열을 선언하여 입력 받는다.
(2) 성별, 숫자 값을 배열로 받아 첫번째 인덱스 "성별"에 따라 조건 분기
(3) 남자의 경우 배수 연산
(4) 여자의 경우 입력값 -1, 입력값 +1 의 값이 같은지 비교하며 반복, 같지 않다면은 break 한다.
(5) 20라인 마다 줄바꿈을 요청했기에 i%20 = 0 일때마다 줄바꿈 문자를 추가한다.
풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ1244 {
public static void main(String[] args)throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int switchNum = Integer.parseInt(bf.readLine());
StringTokenizer st = new StringTokenizer(bf.readLine());
boolean[] switchStatus = new boolean[switchNum];
for(int i =0; i< switchNum; i++){
String str =st.nextToken();
if(str.equals("1")){
switchStatus[i] = true;
}else{
switchStatus[i] = false;
}
}
int studentNum = Integer.parseInt(bf.readLine());
for(int i=0; i<studentNum; i++){
String[] MWindex = bf.readLine().split(" ");
int pos = Integer.parseInt(MWindex[1])-1;
if(MWindex[0].equals("1")){
for(int m =pos; m<switchNum; m+=(pos+1)){
switchStatus[m] = !switchStatus[m];
}
}else{
switchStatus[pos] = !switchStatus[pos];
for(int w = 1; w<switchNum; w++){
if((pos-w) < 0 || (pos+w) >= switchNum){
break;
}
if(switchStatus[pos-w] == switchStatus[pos+w] ) {
switchStatus[pos-w] = !switchStatus[pos-w];
switchStatus[pos+w] = !switchStatus[pos+w];
}else{
break;
}
}
}
}
StringBuilder sb = new StringBuilder();
for(int i=0; i<switchNum; i++){
if(i%20 ==0 && i !=0){ // i = 0 일떄 0%20 = 0 이므로 조건 추가
sb.append("\n");
}
sb.append(((switchStatus[i]) ? 1 : 0 )+" ");
}
System.out.println(sb);
}
}
'Knowledge > 알고리즘' 카테고리의 다른 글
백준 1260번: DFS와 BFS (java) (0) | 2023.12.10 |
---|---|
백준 17478번: 재귀함수가 뭔가요?(java) (0) | 2023.12.07 |
백준 1018번: 체스판 다시 칠하기(java) (0) | 2023.12.05 |
백준 9935번: 문자열 폭발 (java) (2) | 2023.12.01 |
programmers : stack queue 4(주식가격)[java] (0) | 2022.01.11 |