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
- Kotlin
- rxandroid
- SAA
- 공유오피스
- 내부프레그먼트
- 사무실
- 자바
- 알고리즘
- Stack
- fragmentcontainer
- parentfragment
- Android
- 패스트파이브
- 너무 어렵다
- 안드로이드
- 백준
- innernavigation
- 파이썬
- 아키텍쳐
- 재밌긴함
- media3 transformer
- 스택
- media3
- 패파
- 코틀린
- 후기
- 더베일리하우스 삼성점
- 가든웨딩
- 중첩네비게이션
- MVVM
Archives
삽질도사
[백준] 스위치 켜고 끄기 1244 자바 본문
논리력을 크게 요구하지 않는 쉬운 문제였습니다.
하지만 인덱스와 관련된 문법에 에러가 발생하기 또한 쉬운 문제였습니다. (라임오지고)
그렇기때문에 쉬운 로직에도 불구하고 난이도가 실4정도로 잡혀있는 것 같습니다. (심지어 정답률 20%)
저 또한 쉽게 생각하고 대충 짰다가 엄청틀리고 뭐틀렸는지 몰라서 굉장히 헤맸습니다.
여자로직에서 while문에 인덱스 범위를 지정하면서 상당히 헷갈리기 시작하면서(?) 여러번 고쳐썼습니다.
전체적으로 봤을 때,
while문에 진입하기전에 범위를 늘리고 ->
while(true){
늘린 범위가 맞는지 확인 ->
값이 같은지 확인 ->
범위 늘림
}
벗어나면 범위를 좁혀줌->
범위내에 값을 변경
함으로써 문제없이 구현했습니다.
while문을 벗어나는 조건이 범위가 넓거나, 값이 안맞아서 다시 범위를 좁혀주어야만 하는 조건임으로 나오면 다시
좁혀주었습니다.
그리고 제가 또 실수한게 코드에서 주석처리한 것처럼
int left = num--;
int right = num++; 라고 적는 엄청난 실수를..
저러면 num=3일 떄,
left에는 3찍히고 , num = 2가 되고
right에는 2가 찍히고, num = 3이 됩니다...
솔브하다보면 한번 쯤하는 실수인데, 한번 경험했으면 어지간해서는 다시는 경험하지 않는게 좋습니다.
구현문제나 그래프탐색에서 습관적으로 생각없이 코딩하면 저렇게 되오니, 여러분은 저를 참고해서 부디 조심하시길 바랍니다 :)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class 스위치켜고끄기 {
static int bulb, students;
static int[] arr;
private static void change(int gender, int num) {
if (gender == 1) {
for (int x = num; x <= bulb; x += num) {
if (arr[x] == 1)
arr[x] = 0;
else
arr[x] = 1;
}
}
if (gender == 2) {
int left = num-1; // num--;
int right = num+1; //num++; 라고 적었다가 크게 당했음 하기 쉬운 실수이니 주의하자
while(true) {
if((left)<1 || (right)> bulb)
break;
if(arr[left] != arr[right])
break;
left--;
right++;
}
left++;
right--;
for(int x= left; x<=right; x++) {
if (arr[x] == 1)
arr[x] = 0;
else
arr[x] = 1;
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
bulb = Integer.parseInt(st.nextToken());
arr = new int[101];
st = new StringTokenizer(br.readLine());
for (int x = 1; x <= bulb; x++) {
arr[x] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
students = Integer.parseInt(st.nextToken());
for (int x = 0; x < students; x++) {
st = new StringTokenizer(br.readLine());
int gender = Integer.parseInt(st.nextToken());
int num = Integer.parseInt(st.nextToken());
change(gender, num);
}
for (int x = 1; x <= bulb; x++) {
System.out.print(arr[x] + " ");
if(x%20 == 0) System.out.println();
}
}
}
'백준' 카테고리의 다른 글
[백준] 행복 유치원 13164 자바 (0) | 2021.03.12 |
---|---|
[백준] 파일정리 20291 자바 (0) | 2021.03.12 |
[백준] 빙고 2578 자바 (0) | 2021.03.09 |
[백준] 택배 8980 자바 (0) | 2021.03.09 |
[백준] 오리 12933 자바 (0) | 2021.03.09 |