suvera-dev ๐Ÿฅฆ

Algorithm ) Greedy ๋ณธ๋ฌธ

Algorithm/CodingTest - Python

Algorithm ) Greedy

suvera 2022. 2. 5. 09:01

์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์ถœ์ œ ๋นˆ๋„๊ฐ€ ๋†’์€ ๋ฌธ์ œ๋Š” ๊ทธ๋ฆฌ๋””, ๊ตฌํ˜„,  DFS/BFS ๋ฅผ ํ™œ์šฉํ•œ ํƒ์ƒ‰ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค! 

์ˆœ์„œ๋Œ€๋กœ ํฌ์ŠคํŒ… ํ•  ์˜ˆ์ •์ด๊ณ , ์˜ค๋Š˜์€ ๊ธฐ์ดˆ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๊ณ ์ž ํ•œ๋‹ค 

 

 

 

๐Ÿ› ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ํƒ์š•๋ฒ•, ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ• 

- ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์š”๊ตฌ 

- ์ •๋‹น์„ฑ ๋ถ„์„์ด ์ค‘์š” : ๋‹จ์ˆœํžˆ ๊ฐ€์žฅ ์ข‹์•„๋ณด์ด๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์„ ํƒํ•ด๋„ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€ํ† 

- ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ๋งŽ์Œ 

- ํ•˜์ง€๋งŒ, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋Š” ํƒ์š•๋ฒ•์œผ๋กœ ์–ป์€ ํ•ด๊ฐ€ ์ตœ์ ์˜ ํ•ด๊ฐ€ ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์ด๋ฅผ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ’€๋ฆฌ๋„๋ก ์ถœ์ œ๋จ

 

 

 

๐Ÿ’ต๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ! ๊ฑฐ์Šค๋ฆ„๋ˆ 

500์›, 100์›, 50์›, 10์›์งœ๋ฆฌ ๋™์ „์ด ๋ฌดํ•œํžˆ ์กด์žฌ

-> ์†๋‹˜์—๊ฒŒ ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผ ํ•  ๋ˆ์ด N์›์ผ ๋•Œ ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผ ํ•  ๋™์ „์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜ ?

(๋‹จ, ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•  ๋ˆ N์€ ํ•ญ์ƒ 10์˜ ๋ฐฐ์ˆ˜)

 

 

โšก๏ธ๋ฌธ์ œ ํ•ด๊ฒฐ ์•„์ด๋””์–ด 

- ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์žฅ ํฐ ํ™”ํ๋‹จ์œ„ ๋ถ€ํ„ฐ ๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๋Š” ๊ฒƒ

- N์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ๋•Œ, 500์›์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ์„ ๋งŒํผ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๊ณ , ๊ทธ ๋‹ค์Œ 100 50 10 ์›์งœ๋ฆฌ ๋™์ „์„ ์ฐจ๋ก€๋Œ€๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๊ธฐ

 

n = 1260
count = 0

# ํฐ ๋‹จ์œ„์˜ ํ™”ํ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํ™•์ธํ•˜๊ธฐ
array = [500, 100, 50, 10]

for coin in array:
    count += n // coin # ํ•ด๋‹น ํ™”ํ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋™์ „ ์„ธ๊ธฐ
    n %= coin

print(count)

 

๐Ÿฅฆ ์ •๋‹น์„ฑ ๋ถ„์„ 

- ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ „ ์ค‘์—์„œ ํฐ ๋‹จ์œ„๊ฐ€ ํ•ญ์ƒ ์ž‘์€ ๋‹จ์œ„์˜ ๋ฐฐ์ˆ˜์ด๋ฏ€๋กœ ์ž‘์€ ๋‹จ์œ„์˜ ๋™์ „๋“ค์„ ์ข…ํ•ฉํ•ด ๋‹ค๋ฅธ ํ•ด๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†์Œ

- ๋Œ€๋ถ€๋ถ„์˜ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ๋Š” ์ด์ฒ˜๋Ÿผ ๋ฌธ์ œ ํ’€์ด๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์•„์ด๋””์–ด๋ฅผ ๋”์˜ฌ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์ •๋‹นํ•œ์ง€ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๋‹ต์„ ๋„์ถœ ํ•  ์ˆ˜ ์žˆ์Œ 

 

๐ŸŒˆ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋ถ„์„

- ํ™”ํ์˜ ์ข…๋ฅ˜๊ฐ€ K ๋ผ๊ณ  ํ•  ๋•Œ, ์†Œ์Šค์ฝ”๋“œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(K)

- ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๊ฑฐ์Šฌ๋Ÿฌ์ค˜์•ผํ•˜๋Š” ๊ธˆ์•ก๊ณผ๋Š” ๋ฌด๊ด€, ํ™”ํ์˜ ์ข…๋ฅ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉด ๋ฌธ์ œํ•ด๊ฒฐ 

 

 

 

์–ด๋–ค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ , ๋ฐ”๋กœ ๋ฌธ์ œ ์œ ํ˜•์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜์‹ฌํ•˜๊ณ , ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํƒ์š•์ ์ธ ํ•ด๊ฒฐ๋ฒ•์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ณด์ž. ์˜ค๋žœ ์‹œ๊ฐ„์„ ๊ณ ๋ฏผํ•ด๋„ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ์ดํ›„์— ๋‹ค๋ฃจ๊ฒŒ ๋  ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์žฌ์ฐจ ๊ณ ๋ฏผ ! 

 

์‹ค์ œ๋กœ ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ์—์„œ ๋™์ „์˜ ๋‹จ์œ„๊ฐ€ ์„œ๋กœ ๋ฐฐ์ˆ˜ ํ˜•ํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฌด์ž‘์œ„๋กœ ์ฃผ์–ด์ง„ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์—†๋‹ค. ํ™”ํ์˜ ๋‹จ์œ„๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

์‹ค์ „ ๋ฌธ์ œ ํ’€์ด

 

1๏ธโƒฃ๋ฌธ์ œ 1 : ํฐ ์ˆ˜์˜ ๋ฒ•์น™ 

- ๋‹ค์–‘ํ•œ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ ์ฃผ์–ด์ง„ ์ˆ˜๋“ค์„ M ๋ฒˆ ๋”ํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฒ•์น™์ด๋‹ค

- ๋‹จ, ๋ฐฐ์—ด์˜ ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ์—ฐ์†ํ•ด์„œ K๋ฒˆ์„ ์ดˆ๊ณผํ•˜์—ฌ ๋”ํ•ด์งˆ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค

- ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆœ์„œ๋Œ€๋กœ 2,4,5,4,6 ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ M์ด 8์ด๊ณ , K๊ฐ€ 3์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. 

์ด ๊ฒฝ์šฐ ํŠน์ •ํ•œ ์ธ๋ฑ์Šค์˜ ์ˆ˜๊ฐ€ ์—ฐ์†ํ•ด์„œ 3๋ฒˆ๊นŒ์ง€๋งŒ ๋”ํ•ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 6+6+6+5+6+6+6+5 ์ธ 46์ด ๋œ๋‹ค. 

- ๋‹จ, ์„œ๋กœ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋„ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ. ๋‘๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ 4์™€ ๋„ค๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ 4๋Š” ๋‹ค๋ฅด๋‹ค. 

 

 

๐Ÿ“Œ ์ž…๋ ฅ์กฐ๊ฑด 

- ์ฒซ์งธ ์ค„์— N, M, K ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„

- ๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ, ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„. ๋‹จ ๊ฐ๊ฐ์˜ ์ž์—ฐ์ˆ˜๋Š” 1 ์ด์ƒ 10000์ดํ•˜์˜ ์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. 

- ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” K๋Š” ํ•ญ์ƒ M๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค 

 

๐Ÿ“Œ ์ถœ๋ ฅ์กฐ๊ฑด 

- ํฐ ์ˆ˜์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ ๋”ํ•ด์ง„ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

๋ฌธ์ œ ํ•ด๊ฒฐ ์•„์ด๋””์–ด : ๊ฐ€์žฅ ํฐ ์ˆ˜์™€ ๋‘๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜ ๋งŒ ์ €์žฅํ•˜๊ณ , ์—ฐ์†์œผ๋กœ ์ตœ๋Œ€ k๋ฒˆ ๋”ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ํฐ์ˆ˜๋ฅผ k๋ฒˆ ๋”ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ๋กœ ํฐ์ˆ˜๋ฅผ 1๋ฒˆ๋งŒ ๋”ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜์ž! 

# N,M,K ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ , N๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ
n, m, k = map(int, input().split())
data = list(map(int, input().split()))

data.sort() # ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋ฅผ ์ •๋ ฌ
first = data[n - 1] #๊ฐ€์žฅ ํฐ์ˆ˜
second = data[n - 2] #๋‘๋ฒˆ์งธ๋กœ ํฐ์ˆ˜

result = 0

while True:
    for i in range(k): # ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ k๋ฒˆ ๋”ํ•˜๊ธฐ
        if m == 0: # m์ด 0์ด๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ ํƒˆ์ถœ
            break
        result += first
        m -= 1 # ๋”ํ•  ๋•Œ ๋งˆ๋‹ค 1์”ฉ ๋นผ๊ธฐ
    if m == 0:
        break
    result += second # ๋‘๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜๋ฅผ ํ•œ๋ฒˆ๋งŒ ๋”ํ•˜๊ธฐ
    m -= 1 # ๋”ํ•  ๋•Œ๋งˆ๋‹ค 1์”ฉ ๋นผ๊ธฐ

print(result)

ํ’€์ด 1 : ๋‹จ์ˆœํ•˜๊ฒŒ ํ‘ธ๋Š” ์˜ˆ์‹œ -> M์˜ ์ˆ˜๊ฐ€ ์ปค์ง„๋‹ค๋ฉด? ์‹œ๊ฐ„์ดˆ๊ณผ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, ๋” ํšจ์œจ์ ์ธ ํ’€์ด ํ•„์š”

# N,M,K ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ , N๊ฐœ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›๊ธฐ
n, m, k = map(int, input().split())
data = list(map(int, input().split()))

data.sort() # ์ž…๋ ฅ๋ฐ›์€ ์ˆ˜๋ฅผ ์ •๋ ฌ
first = data[n - 1] #๊ฐ€์žฅ ํฐ์ˆ˜
second = data[n - 2] #๋‘๋ฒˆ์งธ๋กœ ํฐ์ˆ˜

# ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์ง€๋Š” ํšŸ์ˆ˜ ๊ณ„์‚ฐ
count = int(m / (k+1)) * k # m์„ k+1 ๋กœ ๋‚˜๋ˆˆ ๋ชซ์— k ๊ณฑํ•˜๊ธฐ
count += m % (k + 1) # ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋‚˜๋จธ์ง€ ๋งŒํผ ํฐ์ˆ˜๊ฐ€ ๋”ํ•ด์ง„๋‹ค 

result = 0
result += (count) * first # ๊ฐ€์žฅ ํฐ์ˆ˜ ๋”ํ•˜๊ธฐ 
result += (m - count) * second # ๋‘๋ฒˆ์งธ๋กœ ํฐ์ˆ˜ ๋”ํ•˜๊ธฐ 

print(result)

ํ’€์ด 2 : ๋ฐ˜๋ณต๋˜๋Š” ์ˆ˜์—ด์— ๋Œ€ํ•ด์„œ ํŒŒ์•… -> ๊ฐ€์žฅ ํฐ ์ˆ˜์™€ ๋‘๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์งˆ ๋•Œ์—๋Š” ํŠน์ •ํ•œ ์ˆ˜์—ด ํ˜•ํƒœ๋กœ ์ผ์ •ํ•˜๊ฒŒ ๋ฐ˜๋ณตํ•ด์„œ ๋”ํ•ด์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Œ -> ๊ทธ ๊ธธ์ด๋Š” K + 1 

 

๐Ÿ’ฅ M์„  K + 1๋กœ ๋‚˜๋ˆˆ ๋ชซ์ด ์ˆ˜์—ด์ด ๋ฐ˜๋ณต๋˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๋˜๊ณ , ์—ฌ๊ธฐ์— K ๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ํšŸ์ˆ˜๊ฐ€ ๋œ๋‹ค 

๋งŒ์•ฝ์— ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€๋งŒํผ ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋”ํ•ด์ง€๋ฏ€๋กœ ์ด๋ฅผ ๋”ํ•ด์ค€๋‹ค ! 

๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ตœ์ข… ๊ฒฐ๊ณผ ๊ฐ’์— ์ด ํšŸ์ˆ˜ ๋งŒํผ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๊ณ  ๋‚จ์€ ํšŸ์ˆ˜๋งŒํผ ๋‘๋ฒˆ์งธ๋กœ ํฐ ์ˆ˜ ๋ฅผ ๋”ํ•ด์ค€๋‹ค !

 

 

 

GitHub - Suyeon9911/Algorithm-Study: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ๋ ˆํฌ ๐Ÿฆ‹

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ๋ ˆํฌ ๐Ÿฆ‹. Contribute to Suyeon9911/Algorithm-Study development by creating an account on GitHub.

github.com

 

 

 

Comments