-
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ์ซ์์ผ๊ตฌAlgo Rhythm๐บ๐/Programmers 2020. 7. 9. 20:12
๐ ๋ฌธ์ ์ค๋ช
์ซ์ ์ผ๊ตฌ ๊ฒ์์ด๋ 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์ ๊ฐ ํ์ [์ธ ์๋ฆฌ์ ์, ์คํธ๋ผ์ดํฌ์ ์, ๋ณผ์ ์] ๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
๐ฏ ์ด๋ป๊ฒ ํ์๋
class Solution { public int solution(int[][] baseball) { int answer = 0; for(int i = 123; i <= 987; i++) { int cHundred = i / 100; int cTen = (i / 10) % 10; int cOne = i % 10; boolean isQualified = true; if(cHundred == cTen || cTen == cOne || cOne == cHundred) continue; if(cTen == 0 || cOne == 0) continue; int[] cDigits = new int[3]; cDigits[0] = cHundred; cDigits[1] = cTen; cDigits[2] = cOne; for(int j = 0; j < baseball.length; j++) { int cS = 0, cB = 0; int n = baseball[j][0]; int nS = baseball[j][1]; int nB = baseball[j][2]; int[] nDigits = new int[3]; nDigits[0] = n / 100; // nHundred nDigits[1] = (n / 10) % 10; // nTen nDigits[2] = n % 10; // nOne // calc strike and ball for(int a = 0; a < 3; a++) { for(int b = 0; b < 3; b++) { if(a == b && nDigits[a] == cDigits[b]) { cS++; } if(a != b && nDigits[a] == cDigits[b]) { cB++; } } } if(cS != nS || cB != nB) { isQualified = false; break; } } if(isQualified) answer++; } return answer; } }
๐ง ์ ์ ๋ ๊ฒ ํ์๋
์ฌ์ค ์ด ๋ฌธ์ ๋ ์ฒ์์ ๋ฌธ์ ๋ฅผ ์๋ชป ์ดํดํด์ ๋์๊ฐ ์ ๋ ์ฝ์ง โโโํ๋ค๊ฐ ๋ค๋ฅธ ๋ถ๋ค์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ํ์๋ค.๐ญ
์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋จํ๋ค.
๊ฐ์ ์๋ก ๋ค๋ฅธ 1~9๋ก ๋ง๋ค ์ ์๋ ์ธ ์๋ฆฌ ์์ ๋ฒ์๋ [123, 987]์ด๋ค. ์ด ์ค 0์ ํฌํจํ๊ฑฐ๋ ์๋ฆฌ ์๊ฐ ๊ฒน์น๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ ์๋ค์ ํ๋์ฉ ์ดํด๋ณธ๋ค. ์ด ์๋ค์ ๋ง๊ทธ๋๋ก ํ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์์ผ๋ก ํ๋ณด์๋ผ๊ณ ๋ถ๋ฅด๊ฒ ๋ค.
ํ๋ณด์์์ ๋ฐฑ์ ์๋ฆฌ ์, ์ญ์ ์๋ฆฌ ์, ์ผ์ ์๋ฆฌ ์๋ฅผ ํ์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋ ๋ฐฐ์ด baseball์ ํ๋์ฉ ์ดํด๋ณธ๋ค.
baseball์์ ์ธ ์๋ฆฌ ์ n, ์คํธ๋ผ์ดํฌ ์ nS, ๋ณผ ์ nB๋ฅผ ํ์ ํ๋ค.
๊ทธ๋ผ ์ด์ ํ๋ณด์์ n์ ๋น๊ตํ์๋์ ์คํธ๋ผ์ดํฌ ์์ ๋ณผ ์๊ฐ ๊ฐ๊ฐ nS, nB์ ์ผ์นํ๋์ง ํ์ธํ๋ฉด ๋๋ค. ์๊ฐํด๋ณด๋ฉด ๊ฐ์ ์๋ฆฌ ์์์ ํ๋ณด์์ n์ด ์ซ์๊ฐ ๊ฐ์ผ๋ฉด ์คํธ๋ผ์ดํฌ์ด๊ณ ๋ค๋ฅธ ์๋ฆฌ ์์์ ํ๋ณด์์ n์ด ์ซ์๊ฐ ๊ฐ์ผ๋ฉด ๋ณผ์ด๋ค. ์ด๋ฅผ ์ฝ๋๋ก ํํํ๋ฉด ์๋์ ๊ฐ๋ค.
// calc strike and ball for(int a = 0; a < 3; a++) { for(int b = 0; b < 3; b++) { if(a == b && nDigits[a] == cDigits[b]) { cS++; } if(a != b && nDigits[a] == cDigits[b]) { cB++; } } }
๋ง์ฝ ํ๋ณด์๊ฐ ๋ชจ๋ baseball์ ๋ํด ๋ง์กฑํ๋ฉด answer๋ฅผ 1 ์ฆ๊ฐํ๋ค. ๊ทธ๋ฌ๋ ๋ง์ฝ ์คํธ๋ผ์ดํฌ ์, ๋ณผ ์์ nS, nB๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ๊ฒ๋ค์ ๋ณผ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ํ์ถํ๊ณ ๋ค์ ํ๋ณด์๋ฅผ ์ดํด๋ณธ๋ค.
๐ ๋ฌด์์ ๋ฐฐ์ ๋
๋ฌธ์ ๋ฅผ ์ฒ์ฒํ ๊ผผ๊ผผ์ด ์ฝ์ ์ ๋ฐ ๐ญ๐ญ๐ญ
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
-