본문 바로가기
Problem Solving/Programmers

[프로그래머스] 숫자 야구

by 테리는당근을좋아해 2020. 4. 6.

문제설명

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

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

 

* 숫자는 맞지만, 위치가 틀렸을 때는 볼

* 숫자와 위치가 모두 맞을 때는 스트라이크

* 숫자와 위치가 모두 틀렸을 때는 아웃

 

예를 들어, 아래의 경우가 있으면

 

A : 123

B : 1스트라이크 1볼.

A : 356

B : 1스트라이크 0볼.

A : 327

B : 2스트라이크 0볼.

A : 489

B : 0스트라이크 1볼.

 

이때 가능한 답은 324와 328 두 가지입니다.

질문한 세 자리의 수, 스트라이크의 수, 볼의 수를 담은 2차원 배열 baseball이 매개변수로 주어질 때, 가능한 답의 개수를 return 하도록 solution 함수를 작성해주세요.

제한사항

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

해결 방법

가능한 모든 123 ~ 987까지(0이 나오는 수 제거, 자리수가 중복되면 제거)에서 

 

불가능한 경우를 제거해나간다.

 

n스트라이크가 들어왔을 경우, 입력받은 숫자와 n개의 자리수에서 값이 일치하지않으면 제거한다.

 

n볼이 들어왔을 경우, n개의 공통된 수를 가지지 않는 경우를 제거한다.

 

JAVA

package programmers;

import java.util.*;

public class p_42841 {
	public static int solution(int[][] b) {
		HashSet<String> set = new HashSet<>();
		for(int i = 123; i <= 987; i++) {
			String s = String.valueOf(i);
			if(s.charAt(0) == s.charAt(1) || s.charAt(1) == s.charAt(2) || s.charAt(2) == s.charAt(0) || s.charAt(0) == '0' || s.charAt(1) == '0' || s.charAt(2) == '0') continue;
			set.add(s);
		}
		
		for(int i = 0; i < b.length; i++) {
			String cmp1 = String.valueOf(b[i][0]);
			for(Iterator it = set.iterator(); it.hasNext();){
				int same = 0;
				String cmp2 = (String)it.next();
				for(int j = 0; j < 3; j++) {
					if(cmp1.charAt(j) == cmp2.charAt(j)) same++;
				}
				if(same != b[i][1]) it.remove();
				else {
					int have = 0;
					for(int j = 0; j < 3; j++) {
						String tmp = String.valueOf(cmp1.charAt(j));
						if(cmp2.contains(tmp)) have++;
					}
					if(have != b[i][2] + b[i][1]) it.remove();
				}
			}
			for(Iterator it = set.iterator(); it.hasNext();) System.out.print(it.next() + " ");
			System.out.println(set.size());
		}
		
		return set.size();
	}
	public static void main(String[] args) {
		int[][] b = {{123, 1, 1}, {356, 1, 0}, {327, 2, 0}, {489, 0, 1}};
		
		System.out.println(solution(b));
	}
}

'Problem Solving > Programmers' 카테고리의 다른 글

[프로그래머스] 섬 연결하기  (0) 2020.04.07
[프로그래머스] N으로 표현  (2) 2020.04.06
[프로그래머스] 예산  (0) 2020.04.04
[프로그래머스] 등굣길  (0) 2020.04.04
[프로그래머스] 기지국 설치  (0) 2020.04.04

댓글