ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 2503번 : 숫자 야구
    BOJ 2024. 1. 27. 21:15

    https://www.acmicpc.net/problem/2503

     

    2503번: 숫자 야구

    첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트

    www.acmicpc.net

     

    이렇게 푸는게 맞는건가 싶지만,,,다른방법이 떠오르지않았ㄷ,ㅏㅏ,,,

    우선 check 함수로 서로 다른 숫자, 그리고 0이 아닐때를 체크해주고, 위에 처음에 틀렸던건, 이 check 함수에서 else 문에 0이 아닐때를 체크해주지 않아서 틀렸었다!

    public static boolean check(int a) {
            String str = "";
            str += (a + "");
    
            if ((str.charAt(0) == str.charAt(1)) || (str.charAt(1) == str.charAt(2)) || (str.charAt(0) == str.charAt(2))) {
                return false;
            } else {
                for(int i=0;i<str.length();i++) {
                    if(str.charAt(i)=='0') {
                        return false;
                    }
                }
                return true;
            }
        }

     

    그리고 main이 좀 복잡한데, 일단 for문으로 n 만큼 돌리고, 입력받은 숫자를 문자열로 바꿔준다.

    그리고 처음에만 123 부터 987 까지 돌면서, 조건에 맞을 때만 aList에 받아서 저장해준다.

    그리고 처음이 아닐때는 겹칠때 리스트에서 해당 값을 빼주었다.

    이때 Java의 List를 제대로 몰랐어서,,,List에서 remove를 쓰면 한칸씩 땡겨가지고

    j-- 를 해주어야 제대로 카운트를 한다! 

    for (int i = 0; i < n; i++) {
                st = new StringTokenizer(br.readLine());
                an = Integer.parseInt(st.nextToken());
                s = Integer.parseInt(st.nextToken());
                b = Integer.parseInt(st.nextToken());
    
                String str = "", tmp = "";
                str += (an + "");
    
                if(i==0) {
                    for (int j = 123; j <= 987; j++) {
                        int sn = 0, bn = 0;
                        if (check(j)) {
                            tmp = "";
                            tmp += (j + "");
                            for (int k = 0; k < 3; k++) {
                                if (str.charAt(k) == tmp.charAt(k)) {
                                    sn++;
                                } else if (str.charAt(k) == tmp.charAt(0) || str.charAt(k) == tmp.charAt(1) || str.charAt(k) == tmp.charAt(2)) {
                                    bn++;
                                }
                            }
                            if (sn == s && bn == b) {
                                aList.add(tmp);
                                size++;
                            }
                        }
                    }
                } else {
                    for(int j=0;j<size;j++) {
                        int sn = 0, bn = 0;
                        if (check(Integer.parseInt(aList.get(j)))) {
                            tmp = aList.get(j);
                            for (int k = 0; k < 3; k++) {
                                if (str.charAt(k) == tmp.charAt(k)) {
                                    sn++;
                                } else if (str.charAt(k) == tmp.charAt(0) || str.charAt(k) == tmp.charAt(1) || str.charAt(k) == tmp.charAt(2)) {
                                    bn++;
                                }
                            }
                            if (sn != s || bn != b) {
                                aList.remove(aList.get(j));
                                size--;
                                j--;
                            }
                        }
                    }
                }
            }

     

    [전체코드]

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.*;
    
    public class Main {
    
        static int ret, an, n, s, b, size;
        static List<String> aList = new ArrayList<>();
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st;
    
            st = new StringTokenizer(br.readLine());
    
            n = Integer.parseInt(st.nextToken());
    
            int cnt = 0;
            for (int i = 0; i < n; i++) {
                st = new StringTokenizer(br.readLine());
                an = Integer.parseInt(st.nextToken());
                s = Integer.parseInt(st.nextToken());
                b = Integer.parseInt(st.nextToken());
    
                String str = "", tmp = "";
                str += (an + "");
    
                if(i==0) {
                    for (int j = 123; j <= 987; j++) {
                        int sn = 0, bn = 0;
                        if (check(j)) {
                            tmp = "";
                            tmp += (j + "");
                            for (int k = 0; k < 3; k++) {
                                if (str.charAt(k) == tmp.charAt(k)) {
                                    sn++;
                                } else if (str.charAt(k) == tmp.charAt(0) || str.charAt(k) == tmp.charAt(1) || str.charAt(k) == tmp.charAt(2)) {
                                    bn++;
                                }
                            }
                            if (sn == s && bn == b) {
                                aList.add(tmp);
                                size++;
                            }
                        }
                    }
                } else {
                    for(int j=0;j<size;j++) {
                        int sn = 0, bn = 0;
                        if (check(Integer.parseInt(aList.get(j)))) {
                            tmp = aList.get(j);
                            for (int k = 0; k < 3; k++) {
                                if (str.charAt(k) == tmp.charAt(k)) {
                                    sn++;
                                } else if (str.charAt(k) == tmp.charAt(0) || str.charAt(k) == tmp.charAt(1) || str.charAt(k) == tmp.charAt(2)) {
                                    bn++;
                                }
                            }
                            if (sn != s || bn != b) {
                                aList.remove(aList.get(j));
                                size--;
                                j--;
                            }
                        }
                    }
                }
            }
    
            System.out.println(size);
    
        }
    
        public static boolean check(int a) {
            String str = "";
            str += (a + "");
    
            if ((str.charAt(0) == str.charAt(1)) || (str.charAt(1) == str.charAt(2)) || (str.charAt(0) == str.charAt(2))) {
                return false;
            } else {
                for(int i=0;i<str.length();i++) {
                    if(str.charAt(i)=='0') {
                        return false;
                    }
                }
                return true;
            }
        }
    
    }

    'BOJ' 카테고리의 다른 글

    [Java] 2583번 : 영역 구하기  (2) 2024.01.30
    [Java] 1697번 : 숨바꼭질  (1) 2024.01.30
    [Java] 16439번 : 치킨치킨치킨  (1) 2024.01.27
    [Java] 15661번 : 링크와 스타트  (1) 2024.01.27
    [Java] 1421번 : 나무꾼 이다솜  (1) 2024.01.26
Designed by Tistory.