Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Archives
Today
Total
관리 메뉴

hwooo

LeetCode (C/C++, Java) 299. Bulls and Cows 본문

Study/Algorithm

LeetCode (C/C++, Java) 299. Bulls and Cows

hwooo 2025. 1. 20. 21:30

https://leetcode.com/problems/bulls-and-cows/description/


풀이

주어진 문자열을 탐색하며 bulls를 찾는다. 이 때 bulls 위치를 기록하며 아닌 자리의 숫자들의 개수를 센다.

한 번 더 탐색하며 bulls 자리는 넘어가고, secret에 있는 숫자이면 해당 숫자의 개수를 줄여주며 cows의 개수를 파악한다.


C/C++ 코드

class Solution {
public:
    string getHint(string secret, string guess) {
        int A = 0, B = 0;
        bool bulls[1000];
        int cnt[10] = {0, };
        for (int i = 0; i < secret.size(); i++) {
            if (secret[i] == guess[i]) {
                A++;
                bulls[i] = true;
            }
            else
                cnt[secret[i] - '0']++;
        }

        for (int i = 0; i < secret.size(); i++) {
            if (bulls[i]) continue;
            int now = guess[i] - '0';
            if (cnt[now] > 0) {
                cnt[now]--;
                B++;
            }
        }
        return to_string(A) + "A" + to_string(B) + "B";
    }
};

 

Java 코드

class Solution {
    public String getHint(String secret, String guess) {
        int[] cnt = new int[10];
        boolean[] locationA = new boolean[secret.length()];
        
        int countA = 0;
        for (int i = 0; i < secret.length(); i++) {
            if (secret.charAt(i) == guess.charAt(i)) {
                countA++;
                locationA[i] = true;
            }
            else cnt[secret.charAt(i) - '0']++;
        }

        int countB = 0;
        for (int i = 0; i < guess.length(); i++) {
            if (!locationA[i] && 0 < cnt[guess.charAt(i) - '0']) {
                cnt[guess.charAt(i) - '0']--;
                countB++;
            }
        }

        StringBuilder sb = new StringBuilder();
        sb.append(Integer.toString(countA)).append("A").append(Integer.toString(countB)).append("B");
        return sb.toString();
    }
}