목록소소한개발 (56)
소소한 개발이야기
[백준 온라인 저지] #1244번 (스위치 켜고 끄기) 문제풀이 https://www.acmicpc.net/problem/2884 스위치를 `boolean[]`로 관리를 하고, `남학생`일 경우의 연산과 `여학생`일 경우의 연산으로 나누어 풀면 쉽게 해결할 수 있다. `단순 시뮬레이션`이기 때문에 노트에 적어가며 차근차근 따라가다 보면 해결 가능하다. 전구를 나타내는 boolean 타입의 배열을 준비한다. 전구의 번호가 1번부터 시작하므로 관리하기 쉽게 `n + 1`만큼 할당해준다. 1 boolean[] right = new boolean[n + 1]; cs 첫 번째로 `남학생`의 경우 `부여받은 수`의 배수인 전구들만 `toggle`하면 되므로 어렵지 않게 접근할 수 있다. 1 2 3 for (int ..
[백준 온라인 저지] #2884번 (알람 시계) 문제풀이 45분 전으로 시간을 맞춰야하는 문제. 45분 전으로 되돌렸을 때 `minute`가 음수인지 아닌지만 확인한다면 쉽게 해결 할 수 있는 문제이다. 여기서 주의해야 할 점은 `hour`가 음수가 되는 경우만 확인해서 전 날인 `23시`로 바꿔주기만 하면 쉽게 해결할 수 있다. 소스코드 12345678if (minute - 45
[백준 온라인 저지] #11718번 (그대로 출력하기) 문제풀이 입력 횟수가 주어지지 않으므로 그 부분만 주의해서 문제를 풀면 쉬운 출력문제이다.총 2가지의 입력 방법에 대한 풀이가 있다. 첫 번째, Scanner를 이용한다면 Scanner의 hasNext() 함수를 이용하여 다음 입력값이 있는지 확인하고 출력해주면 된다. 12345Scanner in = new Scanner(System.in); while (in.hasNext()) { System.out.println(in.nextLine());}Colored by Color Scriptercs 두 번째, BufferedReader를 이용한다면 null인지 확인만 해주면 된다. 1234567BufferedReader br = new BufferedRe..
[백준 온라인 저지] #2490번 (윷놀이) 문제풀이 윷의 앞면과 뒷면을 1과 0으로 표현을 한다. 가장 평범하게 접근할 수 있는 방법은 `입력된 윷의 합`을 구하는 것이다. 윷의 순서는 상관 없으므로 총 합을 기준으로 `도, 개, 걸, 윷, 모`를 확인하면 쉽게 풀 수 있다. 12345678910char[] result = {'윷', '걸', '개', '도', '모'}; String[] input = br.readLine().split(" ");int sum = 0; for (int index = 0; index
[백준 온라인 저지] #8958번 (OX 퀴즈) 문제풀이 접근 방식은 문제를 연속으로 맞출 시 추가적으로 점수를 얻는 것만을 생각하면 된다. 단순하게 접근을 하면 정답이냐(O), 오답이냐(X)이다. 그럼 여기서 연속정답은 어떻게 해결하면 좋을까?? 나의 접근 방식은 문제 정답을 나타내는 변수를 따로 설정하고 문제를 맞출 시 + 1씩 카운팅 하였다. 만약 O일 경우 ++continuity를 해주고 X라면 continuity를 초기화 해준다. 이런 방식을 사용하면 배열을 돌면서 굳이 이 i - 1 번째 원소가 O였는지 확인을 하지 않아도 된다. 소스코드로 확인하면 더 쉽게 다가 올 것이다. 123456int continuity = 0; // 'O'의 카운팅 값if (str[index] == 'O') { su..
[백준 온라인 저지] #10989번 (수 정렬하기 ) 문제풀이 문제만 보면 너무 쉽게 풀 수 있는 정렬문제이다. 하지만 여기서도 함정이 존재하게 되는데 그 함정에 대해서 한 번 살펴보자. 보기에는 쉬운 문제지만 입출력에 대해서 생각하지 않으면 풀 수 없는 문제이다. 일반적으로 접근하는 방법은 Scanner를 이용해서 입력을 받을 뒤 System.out.print()를 이용해 출력하는 방법이다. 하지만 이렇게 접근하는 순간 시간초과라는 메세지를 얻게 될 것이다. (나는 분명 맞게 풀었는데??) 처음에는 입력된 모든 수를 int[] arr에 저장 한 뒤 Arrays.sort()를 이용해서 정렬한 뒤 배열을 출력하는 형태로 접근했다. 하지만 시간초과에 걸린 것을 보고 주어지는 수가 10000보다 작거나 같다는..
Github에 잔디가 심어지지 않아요!! Github를 관리하면서 나는 분명 정상적으로 commit 하고 push를 했는데 contribution에 등록이 되지 않는 경우가 발생해서 문제점을 찾아 보았다. 물론!! Contribution 그래프에 초록색으로 마킹하는게 목적은 아니지만! 내 소중이 잔디가 기록되지 않으면 내가 했던 일들이 없어지는 것 같은 그런 찝찝함이 있지 않은가?? 처음에는 commit 하고 push 하면 무조건 마킹이 되는 줄 알았지만 나중에 보니 마킹이 되지 않고 있었다... 이건 대체 무슨 문제인가...???신기하게도 특정 Repository에만 올리면 마킹이 되지 않는 것을 확인하고 문제점을 찾기 시작했다. 해결책은 다음과 같다. * Github에 등록된 Email과 gitcon..
[백준 온라인 저지] #1100번 (하얀칸) 문제풀이 문자의 비교만 할 수 있고, 체스판의 크기가 8 x 8로 정해져있어 완전 탐색으로 쉽게 풀 수 있는 문제라고 생각이 든다. 입력은 8 x 8 고정이므로 char 배열 8 * 8을 준비해 입력을 받아 완전탐색으로 말이 놓아져 있는지(F인지) 확인하면 된다. 문제에서 요구하는 것은 '하얀 칸 위에 말이 놓아져 있는가' 라는 것인데 완전탐색을 하면서 '하얀 칸인지?' 와 '말이 놓여져 있는지?'를 확인하면 된다. 그럼 '하얀 칸'인지는 어떻게 확인하는 것이 좋을까? (0, 0)이 하얀칸이라고 했으므로 체스판을 머릿속으로 그려보면 규칙을 쉽게 찾을 수 있다. 흰 검 흰 검 흰 검 흰 검 검 흰 검 흰 검 흰 검 희 흰 검 흰 검 흰 검 흰 검 ... 체스판을..