[프로그래머스 - 완전탐색] 숫자야구

2020. 1. 27. 00:25·Algorithm

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42841


문제 설명

숫자 야구 게임이란 2명이 서로가 생각한 숫자를 맞추는 게임입니다. 

각자 서로 다른 1~9까지 3자리 임의의 숫자를 정한 뒤 서로에게 3자리의 숫자를 불러서 결과를 확인합니다. 그리고 그 결과를 토대로 상대가 정한 숫자를 예상한 뒤 맞힙니다.

 

  • 숫자는 맞지만, 위치가 틀렸을 때는 볼
  • 숫자와 위치가 모두 맞을 때는 스트라이크
  • 숫자와 위치가 모두 틀렸을 때는 아웃

제한사항

  • 질문의 수는 1 이상 100 이하의 자연수입니다.
  • baseball의 각 행은 [세 자리의 수, 스트라이크의 수, 볼의 수] 를 담고 있습니다.

풀이 순서

  1. 123 ~ 987까지 가능한 3자리 모든 경우의 수 반복 (제외 1) 0이 포함되는 숫자-100, 제외 2) 서로 중복되는 수-111)
  2. 위 범위 숫자중 제외1), 제외2) 조건에 만족되는 숫자 제외
  3. baseball 배열의 세 자리의 수(var: cmp), 스트라이크의 수(var: strike), 볼의 수(var: ball) 체크
class Solution {
    public int solution(int[][] baseball) {
        int answer = 0;
        // 풀이 순서 1: 모든 세자리 경우의 수
        for(int i=123; i<988; i++){ 
            String tmp = i+"";
            
            // 풀이 순서 2: 제외 조건1), 2)
            if(tmp.contains("0")){
                continue;
            }
            if((tmp.charAt(0) == tmp.charAt(1)) || (tmp.charAt(0) == tmp.charAt(2)) || 
                (tmp.charAt(1) == tmp.charAt(2))){
                continue;
            }
            
            // 풀이 순서 3: baseball의 세자리수(cmp)와 체크하고자 하는 세자리수(tmp)
            // 				strike수와 st_cnt, ball수와 b_cnt 개수 비교
            boolean flag = true;
            for (int j=0; j<baseball.length; j++){
                
                int strike = baseball[j][1];
                int ball = baseball[j][2];
                String cmp = baseball[j][0]+"";
                
                int st_cnt = 0;
                int b_cnt = 0;
                
                for(int k=0; k<3; k++){
                    if(cmp.charAt(k) == tmp.charAt(k)){
                        st_cnt += 1;
                    } 
                    
                    if(cmp.charAt(k) != tmp.charAt(k)){
                        if(tmp.contains(cmp.charAt(k)+"")){
                            b_cnt +=1;
                        }
                    }
                }
          		if(ball != b_cnt || strike != st_cnt){
                        flag = false;
                        break;
                }
            }
            if(flag){
                answer += 1;
            }            
            
        }
        
        return answer;
    }
}

'Algorithm' 카테고리의 다른 글

[프로그래머스 - 정렬] H-Index  (0) 2020.01.27
[프로그래머스 - 정렬] 가장 큰수  (0) 2020.01.27
[프로그래머스 - 스택/큐] 다리를지나는트럭  (0) 2020.01.27
[프로그래머스 - 해시] 베스트앨범  (0) 2020.01.27
[프로그래머스 - 완전탐색] 소수찾기  (0) 2020.01.27
'Algorithm' 카테고리의 다른 글
  • [프로그래머스 - 정렬] 가장 큰수
  • [프로그래머스 - 스택/큐] 다리를지나는트럭
  • [프로그래머스 - 해시] 베스트앨범
  • [프로그래머스 - 완전탐색] 소수찾기
hj_.
hj_.
  • hj_.
    기술 블로그
    hj_.
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Algorithm
      • Side Project
        • PCA 자격증 준비
        • Flutter
        • Vue
      • Flutter
      • Kubernetes
      • 온라인 비즈니스
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Linkedin
    • Github
  • 공지사항

  • 인기 글

  • 태그

    Wordfence
    가장 큰수
    디스크 컨트롤러
    소수찾기
    UpdraftPlus
    서버 환경 구축
    Challenge Lab 2
    색종이붙이기
    microk8s
    Range query)
    프로그래머스
    완전탐색
    boj17136
    다리를 지나는 트럭
    GCP MySQL
    VM INSTANCE
    hosting.kr
    pagespeedinsight
    PCA 자격증
    가벼운 테마
    java
    베스트앨범
    MySQL환경 구축
    페이지 속도
    H-index
    Full text query
    GCP
    elasticsearch
    Deploy and Manage Cloud Environments with Google Cloud
    워드프레스세팅
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
hj_.
[프로그래머스 - 완전탐색] 숫자야구
상단으로

티스토리툴바