목록BOJ (40)
소소한 개발이야기
[BOJ #11052번] (카드 구매하기) 문제 풀이 🔗 [소스 코드] 다이나믹 프로그래밍 입니다. 많은 문제를 접해봐야지 쉽게 접근할 수 있을거 같습니다. 문제를 풀기전에는 쉬워 보였지만 시간이 너무 오래 걸렸네요. 문제를 풀면서 느낀건 Bottom-Up과 Top-Down 두 방식 모두 풀어봐야 한다는 점이었습니다. 문제에 접근하는 방식을 한 번 살펴봅시다. 문제에서 구하고자 하는 것은 카드를 구매하는데 최댓값을 구하는 문제입니다. 카드를 구매할 수 있는 방법은 카드 팩을 구매하는 것인데 i개의 카드가 들어있는 팩 ~ N개의 카드가 들어있는 팩로 구성되어 있습니다. 각 팩마다 value가 정해져 있는데 문제에서 원하는 것은 N개의 카드를 구매하는데 어떤 팩의 조합이 가장 큰 value값을 가지냐는 것입..
[백준 온라인 저지] #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보다 작거나 같다는..
[백준 온라인 저지] #1100번 (하얀칸) 문제풀이 문자의 비교만 할 수 있고, 체스판의 크기가 8 x 8로 정해져있어 완전 탐색으로 쉽게 풀 수 있는 문제라고 생각이 든다. 입력은 8 x 8 고정이므로 char 배열 8 * 8을 준비해 입력을 받아 완전탐색으로 말이 놓아져 있는지(F인지) 확인하면 된다. 문제에서 요구하는 것은 '하얀 칸 위에 말이 놓아져 있는가' 라는 것인데 완전탐색을 하면서 '하얀 칸인지?' 와 '말이 놓여져 있는지?'를 확인하면 된다. 그럼 '하얀 칸'인지는 어떻게 확인하는 것이 좋을까? (0, 0)이 하얀칸이라고 했으므로 체스판을 머릿속으로 그려보면 규칙을 쉽게 찾을 수 있다. 흰 검 흰 검 흰 검 흰 검 검 흰 검 흰 검 흰 검 희 흰 검 흰 검 흰 검 흰 검 ... 체스판을..