๐ ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋งํฌ
โ๐ป ๋ฌธ์ ํ์ด Github ๋งํฌ
๋ฌธ์ ์ค๋ช
XYZ ๋งํธ๋ ์ผ์ ํ ๊ธ์ก์ ์ง๋ถํ๋ฉด 10์ผ ๋์ ํ์ ์๊ฒฉ์ ๋ถ์ฌํฉ๋๋ค. XYZ ๋งํธ์์๋ ํ์์ ๋์์ผ๋ก ๋งค์ผ ํ ๊ฐ์ง ์ ํ์ ํ ์ธํ๋ ํ์ฌ๋ฅผ ํฉ๋๋ค. ํ ์ธํ๋ ์ ํ์ ํ๋ฃจ์ ํ๋์ฉ๋ง ๊ตฌ๋งคํ ์ ์์ต๋๋ค. ์๋ฐํ ์ ํ์ด๋ ์์ ์ด ์ํ๋ ์ ํ๊ณผ ์๋์ด ํ ์ธํ๋ ๋ ์ง์ 10์ผ ์ฐ์์ผ๋ก ์ผ์นํ ๊ฒฝ์ฐ์ ๋ง์ถฐ์ ํ์๊ฐ์ ์ ํ๋ ค ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ด ๋ฐ๋๋ 3๊ฐ, ์ฌ๊ณผ 2๊ฐ, ์ 2๊ฐ, ๋ผ์ง๊ณ ๊ธฐ 2๊ฐ, ๋๋น 1๊ฐ์ด๋ฉฐ, XYZ ๋งํธ์์ 14์ผ๊ฐ ํ์์ ๋์์ผ๋ก ํ ์ธํ๋ ์ ํ์ด ๋ ์ง ์์๋๋ก ์นํจ, ์ฌ๊ณผ, ์ฌ๊ณผ, ๋ฐ๋๋, ์, ์ฌ๊ณผ, ๋ผ์ง๊ณ ๊ธฐ, ๋ฐ๋๋, ๋ผ์ง๊ณ ๊ธฐ, ์, ๋๋น, ๋ฐ๋๋, ์ฌ๊ณผ, ๋ฐ๋๋์ธ ๊ฒฝ์ฐ์ ๋ํด ์์๋ด ์๋ค. ์ฒซ์งธ ๋ ๋ถํฐ ์ดํ ๊ฐ์๋ ๋๋น๊ฐ ํ ์ธํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฒซ์งธ ๋ ์๋ ํ์๊ฐ์ ์ ํ์ง ์์ต๋๋ค. ๋์งธ ๋ ๋ถํฐ ์ดํ ๊ฐ์๋ ๋ฐ๋๋๋ฅผ ์ํ๋ ๋งํผ ํ ์ธ๊ตฌ๋งคํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์งธ ๋ ์๋ ํ์๊ฐ์ ์ ํ์ง ์์ต๋๋ค. ์ ์งธ ๋ , ๋ท์งธ ๋ , ๋ค์ฏ์งธ ๋ ๋ถํฐ ๊ฐ๊ฐ ์ดํ์ ์ํ๋ ์ ํ๊ณผ ์๋์ด ์ผ์นํ๊ธฐ ๋๋ฌธ์ ์ ์ค ํ๋ฃจ์ ํ์๊ฐ์ ์ ํ๋ ค ํฉ๋๋ค.
์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด want์ ์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ ์๋์ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด number, XYZ ๋งํธ์์ ํ ์ธํ๋ ์ ํ์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด discount๊ฐ ์ฃผ์ด์ก์ ๋, ํ์๋ฑ๋ก์ ์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ ๋ชจ๋ ํ ์ธ ๋ฐ์ ์ ์๋ ํ์๋ฑ๋ก ๋ ์ง์ ์ด ์ผ์๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํ์์ค. ๊ฐ๋ฅํ ๋ ์ด ์์ผ๋ฉด 0์ return ํฉ๋๋ค.
์ ํ์ฌํญ
- 1 ≤ want์ ๊ธธ์ด = number์ ๊ธธ์ด ≤ 10
- 1 ≤ number์ ์์ ≤ 10
- number[i]๋ want[i]์ ์๋์ ์๋ฏธํ๋ฉฐ, number์ ์์์ ํฉ์ 10์ ๋๋ค.
- 10 ≤ discount์ ๊ธธ์ด ≤ 100,000
- want์ discount์ ์์๋ค์ ์ํ๋ฒณ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์
๋๋ค.
- 1 ≤ want์ ์์์ ๊ธธ์ด, discount์ ์์์ ๊ธธ์ด ≤ 12
์ ์ถ๋ ฅ ์
want | number | discount | result |
["banana", "apple", "rice", "pork", "pot"] | [3, 2, 2, 2, 1] | ["chicken", "apple", "apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana", "apple", "banana"] | 3 |
["apple"] | [10] | ["banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana", "banana"] | 0 |
๋ฌธ์ ํ์ด
๋์ ํ์ด
import Foundation
func solution(_ want:[String], _ number:[Int], _ discount:[String]) -> Int {
var wantDic = [String:Int]()
var count = 0
for (product, num) in zip(want, number) {
wantDic[product] = num
}
for i in 0..<discount.count-9 {
var dic = [String:Int]()
for j in 0...9 {
dic[discount[i+j]] = ( dic[discount[i+j]] ?? 0 ) + 1
}
if dic == wantDic {
count += 1
}
}
return count
}
discount์ ๋ฐฐ์ด์ ๋๋ฉด์ [0…9] ๊น์ง์ ๋ฐฐ์ด๋ค์ ๋์ ๋๋ฆฌ๋ก ๋ฐ๊พธ์ด ์ ํ์ด๊ฐ ์ํ๋ ์ ํ๊ณผ ์ผ์นํ๋์ง ํ์ ํด์ผํ๋ค. ๊ทธ ๊ณผ์ ์์ ๋์ ๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ ๋์ ๋๋ฆฌ๊ฐ ๊ฐ๋ค๋ฉด count๋ฅผ ์ฌ๋ฆฌ๋๋ก ๋ก์ง์ ๊ตฌํํ๋ค.
discount์ ์ต๋ ๊ธธ์ด๊ฐ 100,000์ด๋ฏ๋ก ์ต๋ 100,000-10์ for๋ฌธ์ ๋๋ฉฐ ๋ฐฐ์ด์ ๋์ ๋๋ฆฌ์ ์ ๋ฆฌํ๋ ๊ณผ์ ์ ๊ฑฐ์ณค๋ค. ํ๋์ ๋ฐฐ์ด์ ๋์ ๋๋ฆฌ์ ๋ฃ๋ ๊ฒฝ์ฐ์ ์๋ 10 ์ด๋ฏ๋ก ์ต๋ ( 100,000-10 ) * 10 ๋ฒ์ ๊ณ์ฐํด์ผํ๋ค.
๋ํ ์ ํ์ด๊ฐ ์ํ๋ ์ ํ๊ณผ ์ํ๋ ์ ํ์ ๊ฐฏ์๋ฅผ ๋์ ๋๋ฆฌ์ ๋ด๋ ๊ณผ์ ์ ์ต๋ 10๋ฒ์ด๋ค.
๊ทธ๋ฌ๋ ๋์ ํ์ด์ ์ต๋ ๋ฐ๋ณต ํ์๋ 10 + ( 100,000-10 ) * 10 ์ด๋ผ๊ณ ํ๋จํ์ฌ ์ถฉ๋ถํ ํ๋ฆฌ๊ฒ ๋ค๊ณ ํ๋จํ๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด
import Foundation
func solution(_ want:[String], _ number:[Int], _ discount:[String]) -> Int {
let cnt = want.count
var wantArr = [Int](repeating: 0, count: cnt)
var discountArr = [Int](repeating: 0, count: cnt)
var saleDict = [String: Int]()
for i in 0..<want.count {
saleDict[want[i]] = i
wantArr[i] = number[i]
}
for i in 0..<10 {
guard let idx = saleDict[discount[i]] else {
continue
}
discountArr[idx] += 1
}
var answer = 0
if wantArr == discountArr {
answer += 1
}
for i in 0..<discount.count-10 {
if let idx = saleDict[discount[i]] {
discountArr[idx] -= 1
}
if let idx = saleDict[discount[i+10]] {
discountArr[idx] += 1
}
if wantArr == discountArr {
answer += 1
}
}
return answer
}
์ด ๋ถ์ ํ์ด๋ ์ฒ์ 0~9๊น์ง์ ๋ฐฐ์ด์ ๊ฐ์๋ฅผ ๊ณ์ฐํด์ Arr์ ๋ฃ์ ํ์ ๊ทธ ๋ค์ 1~10๊น์ง์ ๋ฐฐ์ด์ ๋น๊ตํ๊ธฐ ์ํด์๋ ์๋์ 0์ ๊ฐ์๋ฅผ ๋นผ๊ณ , ๊ทธ๋ค์์ ์ฌ 10์ ๊ฐ์๋ฅผ ๋ํ๋ ์์ผ๋ก ๋ก์ง์ ๊ตฌํํ๋ค. ๊ทธ๋ฌ๋ ๋์ ๊ณ์ฐ๋ณด๋ค ํจ~์ฌ ๋นจ๋๋ค. ๋๋ 0~9๊น์ง์ ๋ฐฐ์ด์ ๋ฐ๋ณต์ ์ผ๋ก ๋์ ๋๋ฆฌ์ ๋ฃ๋ ๋ค๋ฉด ์ด ๋ถ์ ํ์ด๋ ๋ฐ๋ ๋ฐฐ์ด๋ง ๊ณ์ฐํ์ฌ ์๊ฐ ๋ณต์ก๋๋ ๊ณต๊ฐ ๋ณต์ก๋๋ ํจ์ฌ ๋นจ๋๋ค.
์ฒ์์ ํ์ด๊ฐ ์ดํด๊ฐ ๋์ง ์์ ํ๋ํ๋ ๋ฏ์ด๋ณธ ๋ค ์ค์ค๋ก ๋ค์ ์ด ํ์ด๋ก ํ์ด๋ณด์๋ค. wandDic์ ๊ตณ์ด ๋ง๋ค์ง ์์๋ count๋ ๋น๊ตํ์ฌ ๊ณ์ฐํ๋ฉด ๋์๊ณ , ํน์ดํ๊ฒ ๋์ ๋๋ฆฌ์๋ ์ ํ์ด๊ฐ ์ํ๋ ์ ํ๋ค์ index๊ฐ์ ๋ฃ์ด์ discount๋ฅผ ๋น๊ตํ ๋ ํด๋น ์ ํ์ด ๋์ ๋๋ฆฌ์ ๋ค์ด์์ผ๋ฉด ํด๋น ๋์ ๋๋ฆฌ์ value๊ฐ ( ์ ํ์ด๊ฐ ์ํ๋ ์ ํ์ index ๊ฐ ) ์ ์๋ ๋ฐฐ์ด์ ๊ฐ์ ์ฌ๋ ธ๋ค.
๋ค๋ฅธ ์ฌ๋ ํ์ด๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ค์ ํ์ด๋ณธ ๋์ ํ์ด
func solution(_ want:[String], _ number:[Int], _ discount:[String]) -> Int {
var wantArrNum = [String: Int]()
var discountArr = [Int](repeating: 0, count: want.count)
var count = 0
for i in 0..<want.count {
wantArrNum[want[i]] = i
}
for i in 0..<10 {
guard let tmp = wantArrNum[discount[i]] else {
continue
}
discountArr[tmp] += 1
}
print(number, discountArr)
if number == discountArr {
count += 1
}
for i in 0..<discount.count-10 {
if let arrNum = wantArrNum[discount[i]] {
discountArr[arrNum] -= 1
}
if let arrNum = wantArrNum[discount[i+10]] {
discountArr[arrNum] += 1
}
print(number, discountArr)
if number == discountArr {
count += 1
}
}
return count
}