티스토리 뷰
이문제는 완전 탐색 카테고리에 있는 문제로 모든 경우의 수를 다 탐색해서 해를 구하는 방식으로 접근해야 했다.
문제는 어떤 식으로 모든 경우의 수를 구해야 하는가.. 였다. 그래서 좀 찾아보니 모든 해당하는 모든 숫자에 대해 다 탐색해보는 방식으로 풀면 됐다.
문제풀이
-중복되는 숫자가 없는 3 자릿수를 list에 넣어 탐색한다(123~987 0 은 제외)
-주어진 baseball배열에서 숫자와 스트라이크, 볼의 수를 탐색
-strikeCnt -> list의 탐색할 숫자와 baseball배열의 숫자 : 숫자와 인덱스가 같을경우 => +1
-ballCnt -> list의 탐색할숫자와 baseball배열의 숫자 : 숫자는 같지만 인덱스가 다를 경우 => +1
-strikeCnt == baseball[i][1] && ballCnt == baseball[i][2] 경우에 answer++
import java.util.ArrayList;
public class Solution {
public static void main(String[] args) {
int[][] baseball = {{123, 1, 1}, {356, 1, 0}, {327, 2, 0}, {489, 0, 1}};
int answer=0;
//list에 탐색할 123~987 숫자 경우 모두 넣어줌
ArrayList<String> numList = createNum();
//완전탐색
for(int i=0;i<numList.size();i++){
if(check(numList.get(i),baseball)){
answer++;
}
}
System.out.println(answer);
}
//123~987숫자 리스트 생성
public static ArrayList<String> createNum(){
ArrayList<String> list = new ArrayList<>();
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
for(int k=1;k<=9;k++){
if(i!=j && j!=k && i!=k){
list.add(String.valueOf(i)+String.valueOf(j)+String.valueOf(k));
}
}
}
}
return list;
}
//가능한 숫자인지 판별
public static boolean check(String num,int[][] baseball){
boolean check = true;
for(int i=0;i<baseball.length;i++){
int strikeCnt=0;
int ballCnt=0;
String baseNum = String.valueOf(baseball[i][0]);
//인덱스,숫자 같은지 =>strike
for(int j=0;j<num.length();j++){
if(num.charAt(j)==baseNum.charAt(j)) strikeCnt++;
}
//숫자만 같고 인덱스는 다른지 =>ball
for(int j=0;j<num.length();j++){
for(int k=0;k<baseNum.length();k++){
if(num.charAt(j)==baseNum.charAt(k)&& j!=k) ballCnt++;
}
}
//카운트가 맞지 않아 가능한 숫자가 아닐경우
if(baseball[i][1]!=strikeCnt || baseball[i][2]!=ballCnt)
check = false;
}
return check;
}
}
'CS공부 > 알고리즘&문제풀이' 카테고리의 다른 글
[백준 17140]이차원 배열과 연산/삼성 sw역량 테스트 기출(java) (0) | 2020.06.21 |
---|---|
[프로그래머스]해시:전화번호 목록(java) (0) | 2020.06.18 |
[프로그래머스]DFS:여행경로(java) (0) | 2020.06.10 |
[프로그래머스]DFS:단어변환(java) (0) | 2020.06.09 |
[프로그래머스]DFS:네트워크(java) (0) | 2020.06.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MST
- Spring
- 삼성 sw역량 테스트
- 정렬
- websocket
- 자바
- Heap
- 백준
- BFS
- 분리 집합
- sockjs
- Stomp
- 코딩테스트
- Baekjoon
- 채팅
- 운영체제
- 최소 스패닝 트리
- 삼성 sw역량테스트
- programers
- Oracle
- git
- 알고리즘
- OS
- DP
- 완전탐색
- dfs
- java
- JavaScript
- 프로그래머스
- SWEA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함