티스토리 뷰
반응형
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 브루트 포스 알고리즘
⊙ 문제 접근 과정
저번 시간에 풀었던 브루트 포스(brute force) 문제다.
☞brute 무식한 force 힘 -> 무식한 힘
↘완전 탐색 알고리즘
모든 경우의 수를 전부 다 탐색하고 (무식하게) 대입해 충족하는 값을 찾는 방법이다.
브루트 포스 알고리즘 설계의 가장 기본은 모든 영역을 전체 탐색하는 방법이다.(= 완전 탐색 알고리즘)
for문을 이용하여 처음부터 끝까지 전부 다 탐색하였다.
⊙ 문제 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// N의 값을 입력받는다.
int N = in.nextInt();
// M의 값을 입력받는다.
int M = in.nextInt();
//입력받은 N만큼 배열 arr[]를 생성한다.
int[] arr = new int[N];
//N개마다 각각 값을 입력받는다.
for (int i = 0; i<N; i++) {
arr[i] = in.nextInt();
}
//메서드 search를 이용해 문제에 접근한다.
//메서드는 main함수 아래에 구현한다.
int result = search(arr,N,M);
//문제에서 원하는 값 result를 출력한다.
System.out.println(result);
}
//메서드 search
public static int search(int[] arr,int N,int M) {
//결과값인 result 값 초기화
int result =0;
//첫번째 카드
for (int i =0; i < N-2; i++) {
//두번째 카드
for(int j = i+1; j<N-1; j++) {
//세번째 카드
for(int k = j+1; k<N;k++) {
//세 수의 합 : add
int add = arr[i] + arr[j] + arr[k];
//딜러가 부른 숫자와 일치하면 add return
if(M == add) {
return add;
}
//그렇지 않다면 최대한 근접하게 result 값에 넣어준다.
if((result < add) && (add < M)) {
result =add;
}
}
}
}
//마지막엔 우리가 원하는 결과값인 result return
return result;
}
}
SEARCH문에서 FOR문 부분이 어려웠다.
첫 번째 카드에서 i=0이고 N-2까지만 탐색한다. 왜냐하면 두장을 더 뽑아야 하기 때문이다.
두 번째 카드에서는 j=i+1 , 그러니까 첫 번째 카드 다음장부터 N-1까지만 탐색한다. 한 장이 더 남았기 때문이다.
마지막 세번째 카드에서는 k=j+1, 두 번째 카드 다음장부터 N까지 탐색한다.
이 부분만 유의해서 보면 어렵지 않게 코딩할 수 있다.
⊙ 결과
⊙ 마무리
이번에 한번 코드에 주석을 넣어 한 줄씩 설명을 추가해봤다.
보기가 더 수월해졌다.
728x90
반응형
'백준 온라인 저지 [BOJ] > JAVA [자바]' 카테고리의 다른 글
[백준(BOJ)] 9012번 : 괄호 - JAVA[자바] (2) | 2021.04.14 |
---|---|
[백준(BOJ)] 11050번 : 이항 계수 1 - JAVA[자바] (0) | 2021.04.14 |
[백준(BOJ)] 1181번 : 단어 정렬 - JAVA[자바] (0) | 2021.04.13 |
[백준(BOJ)] 2920번 : 음계 - JAVA[자바] (2) | 2021.04.13 |
[백준(BOJ)] 2739번 : 구구단 - JAVA[자바] (0) | 2021.04.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Web
- 운영체제
- py
- 구현
- JS
- 정리
- 자바
- 쉽게 배우는 자바 프로그래밍
- java
- 연습문제
- 해답
- 정렬
- 답
- 파이썬
- 자바스크립트
- 풀이
- 쉽게배우는
- 우종정
- 정답
- 문자열
- OS
- C++
- 알고리즘
- 쉽게배우는자바프로그래밍
- 프로그래머스
- 그리디
- CPP
- BFS
- 백준
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함