diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..722558e --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,8 @@ +## ๐Ÿ“š ๋ฌธ์ œ +- ๋ฌธ์ œ 1 +- ๋ฌธ์ œ 2 +- ๋ฌธ์ œ 3 +- ๋ฌธ์ œ 4 + +## ๐Ÿ“‹ ํ•˜๊ณ  ์‹ถ์€ ๋ง +- ํ•˜๊ณ  ์‹ถ์€ ๋ง 1 \ No newline at end of file diff --git a/README.md b/README.md index 823c0a1..ff99bcb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # :books: Algorithm Study -## :orange_book: โ€‹์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์ดํŠธ +## :orange_book: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์ดํŠธ > ์Šคํ„ฐ๋””๋Š” ๋‹ค์Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์ดํŠธ์— ์žˆ๋Š” ๋ฌธ์ œ๋กœ ์ง„ํ–‰ํ•œ๋‹ค. @@ -12,34 +12,45 @@ ## :ledger: ์ง„ํ–‰๋ฐฉ์‹ -* ๋งค์ฃผ ํ•˜๋‚˜์˜ ์ฃผ์ œ(DP, BFS ๋“ฑ)๋ฅผ ์ •ํ•ด์„œ ๋ฌธ์ œํ’€์ด -* ๋งค์ฃผ ํ•œ๋ช…๋‹น 1๋ฌธ์ œ์”ฉ ๋ฌธ์ œ ์„ ์ • ํ›„ ์—…๋กœ๋“œ -* ์ฃผ๋งˆ๋‹ค ์ฝ”๋“œ ๋ฐ ์„ค๋ช…์„ ์—…๋กœ๋“œ -* ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์–ธ์–ด๋กœ ํ’€์ด -* Github ํ™œ์šฉ - * Repository๋ฅผ Forkํ•ด์˜จ๋‹ค. - * ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  **๋ฌธ์ œ ๋‹จ์œ„**๋กœ commit์„ ํ•œ๋‹ค. - * ```src/๊ฐœ์ธ ํด๋”/```์— ์—…๋กœ๋“œํ•œ๋‹ค. - * ๊ฐ์ž ๋ธŒ๋žœ์น˜๋กœ PR์„ ๋ณด๋‚ธ๋‹ค. - * ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ๋๋‚˜๊ณ  master Branch๋กœ Mergeํ•œ๋‹ค. +- ๋งค์ฃผ ํ•˜๋‚˜์˜ ์ฃผ์ œ(DP, BFS ๋“ฑ)๋ฅผ ์ •ํ•ด์„œ ๋ฌธ์ œํ’€์ด +- ๋งค์ฃผ ํ•œ๋ช…๋‹น 1๋ฌธ์ œ์”ฉ ๋ฌธ์ œ ์„ ์ • ํ›„ ์—…๋กœ๋“œ +- ์ฃผ๋งˆ๋‹ค ์ฝ”๋“œ ๋ฐ ์„ค๋ช…์„ ์—…๋กœ๋“œ +- ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์–ธ์–ด๋กœ ํ’€์ด +- Github ํ™œ์šฉ + - Repository๋ฅผ Forkํ•ด์˜จ๋‹ค. + - ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  **๋ฌธ์ œ ๋‹จ์œ„**๋กœ commit์„ ํ•œ๋‹ค. + - `src/๊ฐœ์ธ ํด๋”/`์— ์—…๋กœ๋“œํ•œ๋‹ค. + - ๊ฐ์ž ๋ธŒ๋žœ์น˜๋กœ PR์„ ๋ณด๋‚ธ๋‹ค. + - ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ๋๋‚˜๊ณ  master Branch๋กœ Mergeํ•œ๋‹ค. ## :green_book: Week Study -| | 1 | 2 | 3 | 4 | -| ----- | :---------------------------------------------------: | :--------------------------------------------: | :---------------------------------------------------: | :----------------------------------------------------: | -| 1์ฃผ์ฐจ | [์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ](https://www.acmicpc.net/problem/1158) | [์—๋””ํ„ฐ](https://www.acmicpc.net/problem/1406) | [ํ’์„  ํ„ฐ๋œจ๋ฆฌ๊ธฐ](https://www.acmicpc.net/problem/2346) | [์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ](https://www.acmicpc.net/problem/2957) | - +| | 1 | 2 | 3 | 4 | +| ------ | :----------------------------------------------------------: | :----------------------------------------------------------: | :-----------------------------------------------------: | :----------------------------------------------------------: | +| 1์ฃผ์ฐจ | [์š”์„ธํ‘ธ์Šค ๋ฌธ์ œ](https://www.acmicpc.net/problem/1158) | [์—๋””ํ„ฐ](https://www.acmicpc.net/problem/1406) | [ํ’์„  ํ„ฐ๋œจ๋ฆฌ๊ธฐ](https://www.acmicpc.net/problem/2346) | [์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ](https://www.acmicpc.net/problem/2957) | +| 2์ฃผ์ฐจ | [์ ˆ๋Œ“๊ฐ’ ํž™](https://www.acmicpc.net/problem/11286) | [์œ„์žฅ](https://programmers.co.kr/learn/courses/30/lessons/42578) | [ํŠธ๋ฆฌ ์ˆœํšŒ](https://www.acmicpc.net/problem/1991) | [์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ - ์—ฐ์žฅ](https://www.acmicpc.net/problem/2957) | +| 3์ฃผ์ฐจ | [์ž๋™์™„์„ฑ](https://programmers.co.kr/learn/courses/30/lessons/17685) | [๋ฌธ์ž์—ด ์••์ถ•](https://programmers.co.kr/learn/courses/30/lessons/60057) | [๊ทธ๋ฃน ๋‹จ์–ด ์ฒด์ปค](https://www.acmicpc.net/problem/1316) | | +| 4์ฃผ์ฐจ | [์Šคํƒ€ํŠธ ํƒ์‹œ](https://www.acmicpc.net/problem/19238) | [์ž๋™์™„์„ฑ - ์—ฐ์žฅ](https://programmers.co.kr/learn/courses/30/lessons/17685) | | | +| 5์ฃผ์ฐจ | [์ˆจ๋ฐ”๊ผญ์งˆ](https://www.acmicpc.net/problem/1697) | [๋ฐ”์ด๋Ÿฌ์Šค](https://www.acmicpc.net/problem/2606) | [ํ† ๋งˆํ† ](https://www.acmicpc.net/problem/7569) | | +| 6์ฃผ์ฐจ | [์ฟผ๋“œํŠธ๋ฆฌ](https://www.acmicpc.net/problem/1992) | [์ƒ‰์ข…์ด ๋งŒ๋“ค๊ธฐ](https://www.acmicpc.net/problem/2630) | [์ข…์ด์˜ ๊ฐœ์ˆ˜](https://www.acmicpc.net/problem/1780) | | +| 7์ฃผ์ฐจ | [๋‹ฌ์ด ์ฐจ์˜ค๋ฅธ๋‹ค, ๊ฐ€์ž.](https://www.acmicpc.net/problem/1194) | [๋Ÿฌ๋ฒ„๋•์„ ์‚ฌ๋ž‘ํ•˜๋Š” ๋ชจ์ž„](https://www.acmicpc.net/problem/18233) | [๋ง‰๋Œ€๊ธฐ](https://www.acmicpc.net/problem/1094) | [์Šคํƒ€ํŠธ์™€ ๋งํฌ](https://www.acmicpc.net/problem/14889) | +| 8์ฃผ์ฐจ | [ํ†ต๋‚˜๋ฌด ๊ฑด๋„ˆ๋›ฐ๊ธฐ](https://www.acmicpc.net/problem/11497) | [์‹ ์ž… ์‚ฌ์›](https://www.acmicpc.net/problem/1946) | [๋™์ „ 0](https://www.acmicpc.net/problem/11047) | | +| 9์ฃผ์ฐจ | [1, 2, 3 ๋”ํ•˜๊ธฐ](https://www.acmicpc.net/problem/9095) | [ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ](https://www.acmicpc.net/problem/12865) | [2ร—n ํƒ€์ผ๋ง 2](https://www.acmicpc.net/problem/11727) | | +| 10์ฃผ์ฐจ | [๋‹ค๋ฆฌ ๋†“๊ธฐ](https://www.acmicpc.net/problem/1010) | [๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ](https://www.acmicpc.net/problem/2579) | [RGB ๊ฑฐ๋ฆฌ](https://www.acmicpc.net/problem/1149) | [ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ - ์—ฐ์žฅ](https://www.acmicpc.net/problem/12865) | +| 11์ฃผ์ฐจ | [์—ด์ฐจ ์‹œ๊ฐ„ํ‘œ](https://www.acmicpc.net/problem/12731) | [์ •์ˆ˜ ์‚ผ๊ฐํ˜•](https://www.acmicpc.net/problem/1932) | [ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ](https://www.acmicpc.net/problem/1254) | | +| 12์ฃผ์ฐจ | [ATM](https://www.acmicpc.net/problem/11399) | [ํšŒ๋ฌธ](https://www.acmicpc.net/problem/17609) | | | +| 13์ฃผ์ฐจ | [๋ฏธ๋กœํƒ์ƒ‰](https://www.acmicpc.net/problem/2178) | [์•”ํ˜ธ์ฝ”๋“œ](https://www.acmicpc.net/problem/2011) | [๋–ก๋จน๋Š”ํ˜ธ๋ž‘์ด](https://www.acmicpc.net/problem/2502) | [์ดŒ์ˆ˜๊ณ„์‚ฐ](https://www.acmicpc.net/problem/2644) | +| 14์ฃผ์ฐจ | [ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ](https://programmers.co.kr/learn/courses/30/lessons/64061) | [๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ](https://programmers.co.kr/learn/courses/30/lessons/12904) | [ํŠœํ”Œ](https://programmers.co.kr/learn/courses/30/lessons/64065) | | +| 15์ฃผ์ฐจ | [์œ„์žฅ](https://programmers.co.kr/learn/courses/30/lessons/42578) | [๋„คํŠธ์›Œํฌ](https://programmers.co.kr/learn/courses/30/lessons/43162) | [์˜์–ด ๋๋ง์ž‡๊ธฐ](https://programmers.co.kr/learn/courses/30/lessons/12981) | | ## :blue_book: Additional Study -| | | | | -| ---- | ---- | ---- | ---- | -| | | | | - - +| ๋ถ„๋ฅ˜ | | | | +| -------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| ์ž๋ฃŒ๊ตฌ์กฐ | [๊ด„ํ˜ธ](https://www.acmicpc.net/problem/9012) | [์‡ ๋ง‰๋Œ€๊ธฐ](https://www.acmicpc.net/problem/10799) | [์Šคํƒ ์ˆ˜์—ด](https://www.acmicpc.net/problem/1874) | +| BFS/DFS | [DFS์™€ BFS](https://www.acmicpc.net/problem/1260) | | | ## :raising_hand: Contributors | [grap3fruit](https://github.com/grap3fruit) | [**kyu9341**](https://github.com/kyu9341) | | ----------------------------------------------- | ----------------------------------------- | | [**do02reen24**](https://github.com/do02reen24) | [**Do-ho**](https://github.com/Do-ho) | - diff --git a/contents/200905.md b/contents/200905.md deleted file mode 100644 index d29072b..0000000 --- a/contents/200905.md +++ /dev/null @@ -1,11 +0,0 @@ -# :fire: ๊ธˆ์ฃผ์˜ ๋ฌธ์ œ (200905) - -> ์ด๋ฒˆ ์ฃผ ์ฃผ์ œ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. - -https://www.acmicpc.net/problem/1158 - -https://www.acmicpc.net/problem/1406 - -https://www.acmicpc.net/problem/2346 - -https://www.acmicpc.net/problem/2957 \ No newline at end of file diff --git a/contents/README.md b/contents/README.md deleted file mode 100644 index 8d294c7..0000000 --- a/contents/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# :fire: ๊ธˆ์ฃผ์˜ ๋ฌธ์ œ (200912) - -> ์ด๋ฒˆ ์ฃผ ์ฃผ์ œ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ 2ํƒ„์ž…๋‹ˆ๋‹ค. - -https://www.acmicpc.net/problem/11286 - -https://programmers.co.kr/learn/courses/30/lessons/42578 - -https://www.acmicpc.net/problem/1991 - -https://www.acmicpc.net/problem/2957 diff --git a/mom/mom20200905.md b/mom/mom20200905.md deleted file mode 100644 index ca4e8ee..0000000 --- a/mom/mom20200905.md +++ /dev/null @@ -1,23 +0,0 @@ -# :family_man_man_girl_boy: ํšŒ์˜๋ก - -### :question: ๊ฐœ์ธ์˜ ์ƒํ™œ์— ์žˆ์–ด์„œ ๋ฏธ์…˜์— ํž˜๋“ฆ์ด ์žˆ์—ˆ๋‚˜. - -- ๋ฏธ์…˜์— ์—ด์ค‘ํ•˜๋А๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•  ์‹œ๊ฐ„์ด ์—†๊ธด ํ–ˆ์œผ๋‚˜ ์‰ฌ์šด 3 ๋ฌธ์ œ, ์–ด๋ ค์šด 1 ๋ฌธ์ œ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. - -- ํ–ฅํ›„ ๊ณ„์†์ ์ธ ์กฐ์œจ์˜ ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. - - - -### :hammer: ํ–ฅํ›„ ํ”ผ์–ด ์„ธ์…˜ ๊ณ„ํš - -- **10:00 ~ 10:15** ์Šคํ„ฐ๋””์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ - -- **10:15 ~ 11:50** ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต์œ  - -- **11:50 ~ 12:00** ๋‹ค์Œ ์ฃผ์ œ ์„ ์ • ๋ฐ ๋ฌธ์ œ ๊ณต์œ  - - - -### :bell: ๊ธฐํƒ€ - -- 2957๋ฒˆ ๋ฌธ์ œ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ๋‹ค์Œ ์ฃผ๊นŒ์ง€ ๋‹ค์‹œ ํ’€์–ด์˜ค๊ธฐ \ No newline at end of file diff --git a/src/Do-ho/README.md b/src/Do-ho/README.md index a409323..9b6702d 100644 --- a/src/Do-ho/README.md +++ b/src/Do-ho/README.md @@ -1,57 +1,3 @@ -# :fire: Week1 +# :fire: Week2 -## :question: ๋ฐฑ์ค€ 1158๋ฒˆ ๋ฌธ์ œ (์š”์„ธํ‘ธ์Šค ์ˆœ์—ด) -- ์ฒ˜์Œ ํ’€์—ˆ๋˜ ๋ฐฉ์‹ - ```python - a, b = map(int, input().split()) - - linked_list = [] - queue = [] - count = 1 - idx = 0 - - for i in range(a): - linked_list.append(str(i+1)) - - while(len(linked_list)!=0): - if(count==b): - queue.append(linked_list[idx]) - linked_list.remove(linked_list[idx]) - count = 1 - else: - count += 1 - idx = (idx + 1)%len(linked_list) - - print('<'+', '.join(queue)+'>') - ``` - - - ์‹œ๊ฐ„์ดˆ๊ณผ.... - - ๋”ฐ๋ผ์„œ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฐ”๋กœ ์˜ฌ๋ ค์„œ ๊ฒ€์‚ฌํ•ด๋„ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ - -- ๋‘ ๋ฒˆ์งธ ํ’€์—ˆ๋˜ ๋ฐฉ์‹ - - ```python - N, K = map(int, input().split()) - - numArr = [] - queue = [] - idx = 0 - - for i in range(N): - numArr.append(str(i+1)) - - while(len(numArr)!=0): - idx = (idx + (K-1)) % len(numArr) - popData = numArr.pop(idx) - queue.append(popData) - - print('<'+', '.join(queue)+'>') - ``` - - - -## :question: ๋ฐฑ์ค€ 1406๋ฒˆ ๋ฌธ์ œ (์—๋””ํ„ฐ) - -- ์ปค๋งจ๋“œ์— ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋ฅผ ๋‚˜๋ˆ  ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. -- ๋ณต์žก๋„์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€ ์•Š์„๊นŒ... -- ์•„๋‹ˆ๋ฉด hidden case๊ฐ€ ์žˆ์„๊นŒ...? \ No newline at end of file +[[์ ˆ๋Œ€๊ฐ’ ํž™](./dataStructor/boj_11286/README.md)] \ No newline at end of file diff --git "a/src/Do-ho/bitmasking/boj_1094_\353\247\211\353\214\200\352\270\260/boj_1094.py" "b/src/Do-ho/bitmasking/boj_1094_\353\247\211\353\214\200\352\270\260/boj_1094.py" new file mode 100644 index 0000000..d3a2099 --- /dev/null +++ "b/src/Do-ho/bitmasking/boj_1094_\353\247\211\353\214\200\352\270\260/boj_1094.py" @@ -0,0 +1,10 @@ +import sys + +X = int(sys.stdin.readline()) + +count = 0 +while(X!=0): + if X%2==1: count += 1 + X = X >> 1 + +sys.stdout.write(str(count)) \ No newline at end of file diff --git "a/src/Do-ho/bitmasking/boj_1194_\353\213\254\354\235\264\354\260\250\354\230\244\353\245\270\353\213\244/boj_1194.py" "b/src/Do-ho/bitmasking/boj_1194_\353\213\254\354\235\264\354\260\250\354\230\244\353\245\270\353\213\244/boj_1194.py" new file mode 100644 index 0000000..f008a5d --- /dev/null +++ "b/src/Do-ho/bitmasking/boj_1194_\353\213\254\354\235\264\354\260\250\354\230\244\353\245\270\353\213\244/boj_1194.py" @@ -0,0 +1,54 @@ +import sys +import copy +from itertools import combinations +from collections import deque + +[N, M] = list(map(int, sys.stdin.readline().split())) +directions = [(-1, 0), (0, -1), (1, 0), (0, 1)] +alphabet = { + 'A': 0, + 'B': 1, + 'C': 2, + 'D': 3, + 'E': 4, + 'F': 5 +} + +myMap = [] +myCheck = [[[False for _ in range(64)] for _ in range(M)] for _ in range(N)] + +for _ in range(N): + myMap.append(list(sys.stdin.readline()[:-1])) + +# ๋งต ์ค‘ ๋ฏผ์‹์ด ์œ„์น˜ ์ฐพ๊ธฐ (๋ฏผ์‹์ด๋Š” ๋ฌด์กฐ๊ฑด ์žˆ๋‹ค) +def findMinsik(): + for i in range(len(myMap)): + for j in range(len(myMap[0])): + if myMap[i][j]=='0': + return (i, j, 0, 0) + +def findMoon(): + queue = deque() + queue.append(findMinsik()) + myCheck[queue[0][0]][queue[0][1]][0] = True + while queue: + target = queue.popleft() + for direction in directions: + nr = target[0] + direction[0] + nc = target[1] + direction[1] + nk = copy.deepcopy(target[2]) + + if nr >= N or nr < 0 or nc >= M or nc < 0: continue + if myMap[nr][nc] == '1': return target[3] + 1 + if myMap[nr][nc] == '#' or myCheck[nr][nc][nk]: continue + if myMap[nr][nc].isupper(): + if nk == 0 or (nk >> alphabet[myMap[nr][nc]]) % 2 != 1: continue + if myMap[nr][nc].islower(): + uA = myMap[nr][nc].upper() + if nk == 0 or (nk >> alphabet[uA]) % 2 != 1: nk += pow(2,alphabet[uA]) + + myCheck[nr][nc][nk] = True + queue.append((nr, nc, nk, target[3]+1)) + return -1 + +print(findMoon()) \ No newline at end of file diff --git "a/src/Do-ho/bitmasking/boj_14889_\354\212\244\355\203\200\355\212\270\354\231\200\353\247\201\355\201\254/boj_14889.py" "b/src/Do-ho/bitmasking/boj_14889_\354\212\244\355\203\200\355\212\270\354\231\200\353\247\201\355\201\254/boj_14889.py" new file mode 100644 index 0000000..4dd4fa1 --- /dev/null +++ "b/src/Do-ho/bitmasking/boj_14889_\354\212\244\355\203\200\355\212\270\354\231\200\353\247\201\355\201\254/boj_14889.py" @@ -0,0 +1,43 @@ +import sys +from itertools import combinations + +def getTeamStats(comb): + startTeamStat = getStat(comb) + + linkTeam = [] + for people in peoples: + if people not in comb: + linkTeam.append(people) + + linkTeamStat = getStat(linkTeam) + + return [startTeamStat, linkTeamStat] + +def getStat(peoples): + result = 0 + for item1 in peoples: + for item2 in peoples: + if item1==item2: continue + result += stats[item1][item2] + + return result + +N = int(sys.stdin.readline()) +halfN = N//2 +stats = [] +peoples = [i for i in range(N)] +team_combinations = [] +balanceStat = 10000 + +for _ in range(N): + stats.append(list(map(int, sys.stdin.readline().split()))) + +for team in list(combinations(peoples, halfN)): + team_combinations.append(team) + +for comb in team_combinations: + [startTeamStat, linkTeamStat] = getTeamStats(comb) + if balanceStat > abs(startTeamStat - linkTeamStat): + balanceStat = abs(startTeamStat - linkTeamStat) + +sys.stdout.write(str(balanceStat)) \ No newline at end of file diff --git "a/src/Do-ho/bitmasking/boj_18233_\353\237\254\353\262\204\353\215\225/boj_18233.py" "b/src/Do-ho/bitmasking/boj_18233_\353\237\254\353\262\204\353\215\225/boj_18233.py" new file mode 100644 index 0000000..2204e17 --- /dev/null +++ "b/src/Do-ho/bitmasking/boj_18233_\353\237\254\353\262\204\353\215\225/boj_18233.py" @@ -0,0 +1,47 @@ +import sys +from itertools import combinations + +[N, P, E] = map(int, sys.stdin.readline().split()) + +peoples = [i for i in range(N)] + +combs = [] +for comb in list(combinations(peoples, P)): + combs.append(comb) + +peopleDolls = [] +for _ in range(N): + data = sys.stdin.readline().split() + peopleDolls.append({'min': int(data[0]), 'max': int(data[1])}) + +def f(): + global combs + for comb in combs: + result = [0 for _ in range(N)] + total = 0 + for i in comb: + total += peopleDolls[i]['min'] + result[i] = peopleDolls[i]['min'] + + if total>E: continue + elif total==E: return result + + # E-total์€ ๋‚จ์€ ์ธํ˜• ๊ฐœ์ˆ˜ + for i in comb: + remainTotalDoll = E - total + remainCombDoll = peopleDolls[i]['max'] - peopleDolls[i]['min'] + + if remainTotalDoll >= remainCombDoll: + result[i] += remainCombDoll + total += remainCombDoll + remainTotalDoll -= remainCombDoll + else: + result[i] += remainTotalDoll + total += remainTotalDoll + remainTotalDoll = 0 + + if remainTotalDoll==0: return result + return [-1] + +for i in f(): + sys.stdout.write(str(i) + ' ') \ No newline at end of file diff --git a/src/Do-ho/dataStructor/boj_11286/README.md b/src/Do-ho/dataStructor/boj_11286/README.md new file mode 100644 index 0000000..6f810f4 --- /dev/null +++ b/src/Do-ho/dataStructor/boj_11286/README.md @@ -0,0 +1,60 @@ + + +## ์šฐ์„  ์ˆœ์œ„ ํ + +1. PriorityQueue๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ• + + ```python + import sys + from queue import PriorityQueue + + que = PriorityQueue() + + N = int(sys.stdin.readline()) + + for i in range(N): + x = int(sys.stdin.readline()) + if(x!=0): que.put((abs(x), x)) + else: + if que.empty(): print(0) + else: print(que.get()[1]) + ``` + +2. heapq๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ• + + ```python + import sys + import heapq + + N = int(input()) + heap = [] + + for i in range(N): + x = int(sys.stdin.readline()) + if(x!=0): heapq.heappush(heap, (abs(x), x)) + else: + if len(heap)==0: print(0) + else: print(heapq.heappop(heap)[1]) + ``` + + + +## ์•Œ๊ฒŒ๋œ ์  + +- input()๊ณผ sys.stdin.readline์˜ ์†๋„ ์ฐจ์ด [์ฐธ์กฐ](https://www.acmicpc.net/blog/view/56) + + - N(=10,000,000), ์ž์—ฐ์ˆ˜(10,000 ์ดํ•˜)๊ฐ€ ์ ํžŒ ํŒŒ์ผ์„ ์ž…๋ ฅ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ธก์ • + + - input()์€ 12.4443์ดˆ + + - int(sys.stdin.readline())์€ 4.4394์ดˆ + + - ์ œ์ผ ๋น ๋ฅธ๊ฑด map(int,os.read(0, 100000000).decode('utf-8').split('\n')) + + - ํ•˜์ง€๋งŒ 0.03์ดˆ ์ฐจ์ด๋ฐ–์— ๋‚˜์ง€ ์•Š์Œ + + + +## ์ฐธ์กฐ + +[์ฐธ์กฐ](https://www.youtube.com/watch?v=jfwjyJvbbBI) \ No newline at end of file diff --git a/src/Do-ho/dataStructor/boj_11286/boj.11286_3.py b/src/Do-ho/dataStructor/boj_11286/boj.11286_3.py new file mode 100644 index 0000000..087d765 --- /dev/null +++ b/src/Do-ho/dataStructor/boj_11286/boj.11286_3.py @@ -0,0 +1,12 @@ +import sys +import heapq + +N = int(input()) +heap = [] + +for i in range(N): + x = int(sys.stdin.readline()) + if(x!=0): heapq.heappush(heap, (abs(x), x)) + else: + if len(heap)==0: print(0) + else: print(heapq.heappop(heap)[1]) \ No newline at end of file diff --git a/src/Do-ho/dataStructor/boj_11286/boj_11286.py b/src/Do-ho/dataStructor/boj_11286/boj_11286.py new file mode 100644 index 0000000..5a57b35 --- /dev/null +++ b/src/Do-ho/dataStructor/boj_11286/boj_11286.py @@ -0,0 +1,92 @@ +import math +import sys + +heap = [] + +def swap(parentIdx, childIdx): + global heap + tmp = heap[parentIdx] + heap[parentIdx] = heap[childIdx] + heap[childIdx] = tmp + +def reheapdown(): + global heap + parentIdx = 0 + + leftChildIdx = 1 + rightChildIdx = 2 + while True: + if parentIdx == 0 and leftChildIdx < len(heap) and rightChildIdx < len(heap): + if abs(heap[leftChildIdx]) <= abs(heap[rightChildIdx]): + if leftChildIdx < len(heap) and abs(heap[leftChildIdx]) <= abs(heap[parentIdx]): + if abs(heap[leftChildIdx]) == abs(heap[parentIdx]) and heap[leftChildIdx] >= heap[parentIdx]: return + swap(parentIdx, leftChildIdx) + parentIdx = leftChildIdx + elif rightChildIdx < len(heap) and abs(heap[rightChildIdx]) <= abs(heap[parentIdx]): + if abs(heap[rightChildIdx]) == abs(heap[parentIdx]) and heap[rightChildIdx] >= heap[parentIdx]: return + swap(parentIdx, rightChildIdx) + parentIdx = rightChildIdx + else: + break + else: + if rightChildIdx < len(heap) and abs(heap[rightChildIdx]) <= abs(heap[parentIdx]): + if abs(heap[rightChildIdx]) == abs(heap[parentIdx]) and heap[rightChildIdx] >= heap[parentIdx]: return + swap(parentIdx, rightChildIdx) + parentIdx = rightChildIdx + + elif leftChildIdx < len(heap) and abs(heap[leftChildIdx]) <= abs(heap[parentIdx]): + if abs(heap[leftChildIdx]) == abs(heap[parentIdx]) and heap[leftChildIdx] >= heap[parentIdx]: return + swap(parentIdx, leftChildIdx) + parentIdx = leftChildIdx + else: + break + else: + if leftChildIdx < len(heap) and abs(heap[leftChildIdx]) <= abs(heap[parentIdx]): + if abs(heap[leftChildIdx]) == abs(heap[parentIdx]) and heap[leftChildIdx] >= heap[parentIdx]: return + swap(parentIdx, leftChildIdx) + parentIdx = leftChildIdx + elif rightChildIdx < len(heap) and abs(heap[rightChildIdx]) <= abs(heap[parentIdx]): + if abs(heap[rightChildIdx]) == abs(heap[parentIdx]) and heap[rightChildIdx] >= heap[parentIdx]: return + swap(parentIdx, rightChildIdx) + parentIdx = rightChildIdx + else: + break + leftChildIdx = parentIdx * 2 + 1 + rightChildIdx = parentIdx * 2 + 2 + + +def reheapup(childIdx): + global heap + if childIdx == 0: return + parentIdx = math.floor((childIdx + 1) / 2) - 1 + while abs(heap[parentIdx]) >= abs(heap[childIdx]): + if childIdx == 0: return + if abs(heap[childIdx]) == abs(heap[parentIdx]) and heap[childIdx] >= heap[parentIdx]: return + swap(parentIdx, childIdx) + childIdx = parentIdx + parentIdx = math.floor(childIdx/2) + +def insert(input): + global heap + heap.append(input) + reheapup(len(heap)-1) + +def popMin(): + global heap + if(len(heap)==0): + print(0) + return + if(len(heap)==1): + print(heap.pop()) + return + output = heap[0] + heap[0] = heap.pop() + reheapdown() + print(output) + +N = int(sys.stdin.readline()) + +for i in range(N): + inputNumber = int(sys.stdin.readline()) + if(inputNumber == 0): popMin() + else: insert(inputNumber) \ No newline at end of file diff --git a/src/Do-ho/dataStructor/boj_11286/boj_11286_2.py b/src/Do-ho/dataStructor/boj_11286/boj_11286_2.py new file mode 100644 index 0000000..e87efb5 --- /dev/null +++ b/src/Do-ho/dataStructor/boj_11286/boj_11286_2.py @@ -0,0 +1,13 @@ +import sys +from queue import PriorityQueue + +que = PriorityQueue() + +N = int(sys.stdin.readline()) + +for i in range(N): + x = int(sys.stdin.readline()) + if(x!=0): que.put((abs(x), x)) + else: + if que.empty(): print(0) + else: print(que.get()[1]) \ No newline at end of file diff --git a/src/Do-ho/dataStructor/boj_1991/README.md b/src/Do-ho/dataStructor/boj_1991/README.md new file mode 100644 index 0000000..73ea5c8 --- /dev/null +++ b/src/Do-ho/dataStructor/boj_1991/README.md @@ -0,0 +1,13 @@ +## ํŠธ๋ฆฌ + +- preorder(์ „์œ„ ์ˆœํšŒ) + - ๋ฃจํŠธ / ์™ผ์ชฝ ์ž์‹ / ์˜ค๋ฅธ์ชฝ ์ž์‹ +- inorder(์ค‘์œ„ ์ˆœํšŒ) + - ์™ผ์ชฝ ์ž์‹ / ๋ฃจํŠธ / ์˜ค๋ฅธ์ชฝ ์ž์‹ +- postorder(ํ›„์œ„ ์ˆœํšŒ) + - ์™ผ์ชฝ ์ž์‹ / ์˜ค๋ฅธ์ชฝ ์ž์‹ / ๋ฃจํŠธ + + + +- python์—์„œ ํŠธ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ์ผ๋‹จ dictionary๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. +- ๋งŒ๋“ค๊ณ  ๋‚œ ๋’ค ๋ฃจํŠธ ๋…ธ๋“œ์ธ 'A'๋…ธ๋“œ ๋ถ€ํ„ฐ ์žฌ๊ท€์ ์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. \ No newline at end of file diff --git a/src/Do-ho/dataStructor/boj_1991/boj_1991.py b/src/Do-ho/dataStructor/boj_1991/boj_1991.py new file mode 100644 index 0000000..7955aae --- /dev/null +++ b/src/Do-ho/dataStructor/boj_1991/boj_1991.py @@ -0,0 +1,36 @@ +import sys + +def preorder(ch): + result = '' + if(ch!='.'): + result += ch + result += preorder(tree[ch][0]) + result += preorder(tree[ch][1]) + return result + +def inorder(ch): + result = '' + if(ch!='.'): + result += inorder(tree[ch][0]) + result += ch + result += inorder(tree[ch][1]) + return result + +def postorder(ch): + result = '' + if(ch!='.'): + result += postorder(tree[ch][0]) + result += postorder(tree[ch][1]) + result += ch + return result + +N = int(sys.stdin.readline()) +tree = {} + +for i in range(N): + line = sys.stdin.readline().replace('\n', '').split(' ') + tree[line[0]] = [line[1], line[2]] + +print(preorder('A')) +print(inorder('A')) +print(postorder('A')) \ No newline at end of file diff --git "a/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/README.md" "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/README.md" new file mode 100644 index 0000000..7875641 --- /dev/null +++ "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/README.md" @@ -0,0 +1,23 @@ +## ํ•ด์‹œ + +- python์—์„œ hash๋Š” dictionary ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. + + + +## ์•„์ด๋””์–ด + +- ์ฒ˜์Œ์—๋Š” ์กฐํ•ฉ์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐ์„ ํ•ด๋ดค๋‹ค. ํ•˜์ง€๋งŒ ๋ถ€๋ถ„ ์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•˜๋‹ค. + +- ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉฐ ๋ช‡ ๊ฐœ ๊ณ„์‚ฐ์„ ํ•ด๋ณด๋‹ˆ ๊ทœ์น™์ด ๋ˆˆ์— ๋ณด์˜€๋‹ค. + + - ์˜์ƒ์˜ ๊ฐœ์ˆ˜๊ฐ€ [2, 2] ์ผ ๋•Œ + + > (2+1) * (2+1) - 1 = 8๊ฐœ์˜€๋‹ค. + + - ์˜์ƒ์˜ ๊ฐœ์ˆ˜๊ฐ€ [2, 2, 3] ์ผ ๋•Œ + + > (2+1) * (2+1) * (3+1) - 1= 35๊ฐœ์˜€๋‹ค. + + - ๊ฒฐ๊ตญ ๊ทœ์น™์€ ๊ตฌํ•ด์˜จ values ๋ชจ๋“  ์ˆ˜์— 1์„ ๋”ํ•˜๊ณ  ๊ณฑํ•œ ๋’ค 1์„ ๋บ€ ๊ฐ’์ด๋‹ค. + + - ์ƒ๊ฐ์„ ํ•ด๋ณด๋‹ˆ ์ž…์ง€ ์•Š์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋’ค ๋ชจ๋‘ ์ž…์ง€ ์•Š์€ ๊ฒฝ์šฐ์˜ ์ˆ˜์ธ 1๊ฐœ๋ฅผ ๋นผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„ ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค. \ No newline at end of file diff --git "a/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.js" "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.js" new file mode 100644 index 0000000..c8b00b6 --- /dev/null +++ "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.js" @@ -0,0 +1,8 @@ +const solution = clothes => { + const clothesObject = clothes.reduce((acc, [name, kind]) => { + acc.hasOwnProperty(kind)? acc[kind] += 1 : acc[kind] = 1; + return acc; + }, new Object()); + + return Object.values(clothesObject).reduce((acc, val) => acc *= val + 1, 1) - 1; +} \ No newline at end of file diff --git "a/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.py" "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.py" new file mode 100644 index 0000000..da3cfd5 --- /dev/null +++ "b/src/Do-ho/dataStructor/pgs_\354\234\204\354\236\245/pgs_\354\234\204\354\236\245.py" @@ -0,0 +1,10 @@ +def solution(clothes): + answer = 1 + hash = {} + for item in clothes: + try: hash[item[1]] += 1 + except: hash[item[1]] = 1 + 1 + + for val in list(hash.values()): answer *= val + + return answer - 1 \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_1260_DFS\354\231\200BFS/README.md" "b/src/Do-ho/dfsbfs/boj_1260_DFS\354\231\200BFS/README.md" new file mode 100644 index 0000000..fde0e85 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_1260_DFS\354\231\200BFS/README.md" @@ -0,0 +1,6 @@ +# DFS์™€ BFS + +- BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) + - queue๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์„ ์ •๋ ฌ ํ›„ ์ถ”๊ฐ€ +- DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) + - stack์„ ์ด์šฉํ•ด ํ•ด๋‹น ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์„ ์—ญ์ •๋ ฌ ํ›„ ์ถ”๊ฐ€ \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_1260_DFS\354\231\200BFS/boj_1260.py" "b/src/Do-ho/dfsbfs/boj_1260_DFS\354\231\200BFS/boj_1260.py" new file mode 100644 index 0000000..442b3f2 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_1260_DFS\354\231\200BFS/boj_1260.py" @@ -0,0 +1,40 @@ +import sys + +def bfs(graph, start): + visited = [] + queue = [start] + + while queue: + n = queue.pop(0) + if n not in visited: + visited.append(n) + if n in graph: + queue += sorted(graph[n] - set(visited)) + return visited + +def dfs(graph, start): + visited = [] + stack = [start] + + while stack: + n = stack.pop() + if n not in visited: + visited.append(n) + if n in graph: + stack += sorted(graph[n] - set(visited), reverse=True) + return visited + +[N, M, V] = map(int, sys.stdin.readline()[:-1].split(' ')) + +tree = {} + +for i in range(N+1): + tree[i] = set() + +for i in range(M): + [startPoint, endPoint] = list(map(int, sys.stdin.readline()[:-1].split(' '))) + tree[startPoint].add(endPoint) + tree[endPoint].add(startPoint) + +print(" ".join(map(str, dfs(tree, V)))) +print(" ".join(map(str, bfs(tree, V)))) diff --git "a/src/Do-ho/dfsbfs/boj_1697_\354\210\250\353\260\224\352\274\255\354\247\210/README.md" "b/src/Do-ho/dfsbfs/boj_1697_\354\210\250\353\260\224\352\274\255\354\247\210/README.md" new file mode 100644 index 0000000..552d1a3 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_1697_\354\210\250\353\260\224\352\274\255\354\247\210/README.md" @@ -0,0 +1,74 @@ +# ์ˆจ๋ฐ”๊ผญ์งˆ + +##### 1. ์žฌ๊ท€๋ฅผ ํ†ตํ•œ ํ’€์ด + +```python +import sys + +maxCount = 100001 + +def search(start, end, count): + global maxCount + if(count>=maxCount): + return + if start==end: + if maxCount>=count: + maxCount = count + return + elif (end*2)<=start: + return + elif start<=-1: + return + else: + if start==0: + search(start+1, end, count+1) + if start < end: + search(start*2, end, count+1) + search(start+1, end, count+1) + search(start-1, end, count+1) + else: + count += end-start + return + +[N, K] = map(int, sys.stdin.readline()[:-1].split(' ')) +search(N, K, 0) + +print(maxCount) +``` +- ํ•ด๋‹น ํ’€์ด๋Š” ์žฌ๊ท€์˜ ํ˜ธ์ถœ์ด ๋„ˆ๋ฌด ๋งŽ์•„ ๋Ÿฐํƒ€์ž„์ด ๋‚˜์˜ด + + + +##### 2. bfs๋ฅผ ํ†ตํ•œ ํ’€์ด + +```python +import sys + +checkList = [False for i in range(100001)] + +def search(start, end): + global checkList + + queue = [(start, 0)] + + while len(queue)!=0: + target = queue.pop(0) + if target[0] > 100000 or target[0] < 0: continue + if checkList[target[0]]: continue + + checkList[target[0]] = True + + if target[0] == end: + print(target[1]) + break + + queue.append((target[0]*2, target[1] + 1)) + queue.append((target[0]-1, target[1] + 1)) + queue.append((target[0]+1, target[1] + 1)) + +[N, K] = map(int, sys.stdin.readline()[:-1].split(' ')) + +search(N, K) +``` + +- bfs๋ฅผ ํ†ตํ•ด ๊ฐ€์žฅ ๋จผ์ € ์ฐพ์•„์ง€๋Š” ์นด์šดํŠธ๋ฅผ ํ™œ์šฉ \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_1697_\354\210\250\353\260\224\352\274\255\354\247\210/boj_1697.py" "b/src/Do-ho/dfsbfs/boj_1697_\354\210\250\353\260\224\352\274\255\354\247\210/boj_1697.py" new file mode 100644 index 0000000..d113a7e --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_1697_\354\210\250\353\260\224\352\274\255\354\247\210/boj_1697.py" @@ -0,0 +1,27 @@ +import sys + +checkList = [False for i in range(100001)] + +def search(start, end): + global checkList + + queue = [(start, 0)] + + while len(queue)!=0: + target = queue.pop(0) + if target[0] > 100000 or target[0] < 0: continue + if checkList[target[0]]: continue + + checkList[target[0]] = True + + if target[0] == end: + print(target[1]) + break + + queue.append((target[0]*2, target[1] + 1)) + queue.append((target[0]-1, target[1] + 1)) + queue.append((target[0]+1, target[1] + 1)) + +[N, K] = map(int, sys.stdin.readline()[:-1].split(' ')) + +search(N, K) \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_19238_\354\212\244\355\203\200\355\212\270\355\203\235\354\213\234/README.md" "b/src/Do-ho/dfsbfs/boj_19238_\354\212\244\355\203\200\355\212\270\355\203\235\354\213\234/README.md" new file mode 100644 index 0000000..7cf4bb0 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_19238_\354\212\244\355\203\200\355\212\270\355\203\235\354\213\234/README.md" @@ -0,0 +1,32 @@ +# ์Šคํƒ€ํŠธ ํƒ์‹œ + +- ๋งต์—๋‹ค๊ฐ€ ํ•ด๋‹น ์‚ฌ๋žŒ์„ ํ‘œํ˜„ + +- 1์€ ๋ฒฝ, 2์™€ -2๋ฅผ ๋™์‹œ์— ํ‘œํ˜„ํ•ด ์‹œ์ž‘์ ๊ณผ ๋„์ฐฉ์ ์„ ํ‘œ๊ธฐ + + - ์ด๋ ‡๊ฒŒ ํ•  ๊ฒฝ์šฐ ๊ฒน์น  ์œ„ํ—˜์ด ์žˆ์„๋“ฏ + - ๋”ฐ๋ผ์„œ ๋งต์— ๋„ฃ๊ณ  ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„๋“ฏ + +- ๊ธธ ์ฐพ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ bfs๋ฅผ ์ฑ„ํƒ + + - ๋ชจ๋“  ๋งต์„ ์ฐพ์ง€ ์•Š๊ณ  ์ค‘๊ฐ„์— break ๊ฐ€๋Šฅํ• ๊นŒ? + + ```python + def bfs(graph, start): + visited = [] + queue = [start] + + while queue: + n = queue.pop(0) + if n not in visited: + visited.append(n) + if n in graph: + queue += sorted(graph[n] - set(visited)) + return visited + ``` + + - ์žฌ๊ท€ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ผ์„œ ๊ฐ€๋Šฅํ•  ๊ฒƒ ๊ฐ™์Œ! + - ์–ด๋””๋กœ ์›€์ง์ผ ์ง€์— ๋Œ€ํ•œ ์„ค๊ณ„๊ฐ€ ํ•„์š” + + - + diff --git "a/src/Do-ho/dfsbfs/boj_19238_\354\212\244\355\203\200\355\212\270\355\203\235\354\213\234/boj_19238.py" "b/src/Do-ho/dfsbfs/boj_19238_\354\212\244\355\203\200\355\212\270\355\203\235\354\213\234/boj_19238.py" new file mode 100644 index 0000000..271d780 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_19238_\354\212\244\355\203\200\355\212\270\355\203\235\354\213\234/boj_19238.py" @@ -0,0 +1,32 @@ +import sys + +# N : ํ™œ๋™ ์˜์—ญ(๊ฐ€๋กœ * ์„ธ๋กœ) +# M : ์Šน๊ฐ์˜ ์ˆ˜ +# fuel : ์ฒ˜์Œ ์†Œ์ง€ํ•œ ์—ฐ๋ฃŒ +[N, M, fuel] = map(int, sys.stdin.readline()[:-1].split(' ')) + +road = [] + +# ๊ธธ ์ž…๋ ฅ +for i in range(N): + appendArr = list(map(int, sys.stdin.readline()[:-1].split(' '))) + road.append(appendArr) + +# ํƒ์‹œ ์ฒ˜์Œ ์ขŒํ‘œ ์ž…๋ ฅ +[taxiX, texiY] = map(int, sys.stdin.readline()[:-1].split(' ')) + +# ์†๋‹˜ ์œ„์น˜ ๋ฐ ๋ชฉ์ ์ง€ ์ž…๋ ฅ +for i in range(M): + cus = list(map(int, sys.stdin.readline()[:-1].split(' '))) + road[cus[0]-1][cus[1]-1] = i+2 + road[cus[2]-1][cus[3]-1] = -(i+2) + +print(road) + +def dfs(startPoint, endPoint): + num = 0 + + # if(startPoint[0]>=endPoint[0]): + + + return num \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_2178_\353\257\270\353\241\234\355\203\220\354\203\211/README.md" "b/src/Do-ho/dfsbfs/boj_2178_\353\257\270\353\241\234\355\203\220\354\203\211/README.md" new file mode 100644 index 0000000..6ae8b04 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_2178_\353\257\270\353\241\234\355\203\220\354\203\211/README.md" @@ -0,0 +1,32 @@ +# ๋ฏธ๋กœ ํƒ์ƒ‰ + +- 31782KB, 132ms +- ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์œผ๋กœ ํ•ด๊ฒฐ + +``` +import sys +from collections import deque + +D = [(1, 0), (0, 1), (-1, 0), (0, -1)] + +N, M = map(int, sys.stdin.readline().strip().split()) +MAZE = deque() +for _ in range(N): MAZE.append(sys.stdin.readline().strip()) + +q = deque() +visited = [[False for _ in range(M)] for _ in range(N)] +q.append((0,0,1)) +visited[0][0] = True + +while q: + tx, ty, moves = q.popleft() + if(tx == N-1 and ty == M-1): + sys.stdout.write(str(moves)+'\n') + break + for DIR in D: + nx, ny = [tx + DIR[0], ty + DIR[1]] + if(nx < 0 or nx >= N or ny < 0 or ny >= M): continue + if(MAZE[nx][ny] == '0' or visited[nx][ny]): continue + q.append((nx, ny, moves+1)) + visited[nx][ny] = True +``` diff --git "a/src/Do-ho/dfsbfs/boj_2178_\353\257\270\353\241\234\355\203\220\354\203\211/boj_2178.py" "b/src/Do-ho/dfsbfs/boj_2178_\353\257\270\353\241\234\355\203\220\354\203\211/boj_2178.py" new file mode 100644 index 0000000..20be861 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_2178_\353\257\270\353\241\234\355\203\220\354\203\211/boj_2178.py" @@ -0,0 +1,25 @@ +import sys +from collections import deque + +D = [(1, 0), (0, 1), (-1, 0), (0, -1)] + +N, M = map(int, sys.stdin.readline().strip().split()) +MAZE = deque() +for _ in range(N): MAZE.append(sys.stdin.readline().strip()) + +q = deque() +visited = [[False for _ in range(M)] for _ in range(N)] +q.append((0,0,1)) +visited[0][0] = True + +while q: + tx, ty, moves = q.popleft() + if(tx == N-1 and ty == M-1): + sys.stdout.write(str(moves)+'\n') + break + for DIR in D: + nx, ny = [tx + DIR[0], ty + DIR[1]] + if(nx < 0 or nx >= N or ny < 0 or ny >= M): continue + if(MAZE[nx][ny] == '0' or visited[nx][ny]): continue + q.append((nx, ny, moves+1)) + visited[nx][ny] = True \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_2606_\353\260\224\354\235\264\353\237\254\354\212\244/README.md" "b/src/Do-ho/dfsbfs/boj_2606_\353\260\224\354\235\264\353\237\254\354\212\244/README.md" new file mode 100644 index 0000000..e7defb7 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_2606_\353\260\224\354\235\264\353\237\254\354\212\244/README.md" @@ -0,0 +1,3 @@ +# ๋ฐ”์ด๋Ÿฌ์Šค + +- bfs๋กœ ๊ฐ€๋ฟํ•˜๊ฒŒ ํ†ต๊ณผ~~!! \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_2606_\353\260\224\354\235\264\353\237\254\354\212\244/boj_2606.py" "b/src/Do-ho/dfsbfs/boj_2606_\353\260\224\354\235\264\353\237\254\354\212\244/boj_2606.py" new file mode 100644 index 0000000..a14d86d --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_2606_\353\260\224\354\235\264\353\237\254\354\212\244/boj_2606.py" @@ -0,0 +1,27 @@ +import sys + +def bfs(graph, start): + visited = [] + queue = [start] + + while len(queue)!=0: + target = queue.pop(0) + if target not in visited: + visited.append(target) + for item in graph[target]: + queue.append(item) + return len(visited)-1 + +computerNum = int(sys.stdin.readline()[:-1]) +lineNum = int(sys.stdin.readline()[:-1]) +graph = {} + +for i in range(lineNum): + [node1, node2] = map(int, sys.stdin.readline()[:-1].split(' ')) + try: graph[node1].append(node2) + except: graph[node1] = [node2] + + try: graph[node2].append(node1) + except: graph[node2] = [node1] + +print(bfs(graph, 1)) \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_2644_\354\264\214\354\210\230\352\263\204\354\202\260/README.md" "b/src/Do-ho/dfsbfs/boj_2644_\354\264\214\354\210\230\352\263\204\354\202\260/README.md" new file mode 100644 index 0000000..da85a85 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_2644_\354\264\214\354\210\230\352\263\204\354\202\260/README.md" @@ -0,0 +1,5 @@ +# ์ดŒ์ˆ˜ ๊ณ„์‚ฐ + +dfs๋กœ ํ’€์–ด๋ฒ„๋ฆฌ์ž~~~ + +๊ทผ๋ฐ ... exit()๋ฅผ ์“ฐ๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์˜ด.. ใ… ใ…  \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_2644_\354\264\214\354\210\230\352\263\204\354\202\260/boj_2644.py" "b/src/Do-ho/dfsbfs/boj_2644_\354\264\214\354\210\230\352\263\204\354\202\260/boj_2644.py" new file mode 100644 index 0000000..62edba0 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_2644_\354\264\214\354\210\230\352\263\204\354\202\260/boj_2644.py" @@ -0,0 +1,32 @@ +import sys +from collections import deque + +n = int(sys.stdin.readline()) +a, b = map(int, sys.stdin.readline().rstrip().split()) +m = int(sys.stdin.readline()) + +r = {} + +for _ in range(m): + x, y = map(int, sys.stdin.readline().rstrip().split()) + try: r[x].append(y) + except: r[x] = [y] + try: r[y].append(x) + except: r[y] = [x] + +def dfs(): + q = deque() + q.append((a, 0)) + visited = [False for _ in range(n+1)] + + while(q): + target, chon = q.pop() + if(target == b): + return chon + for item in r[target]: + if(visited[item]): continue + q.append((item, chon+1)) + visited[item] = True + return -1 + +print(dfs()) \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/README.md" "b/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/README.md" new file mode 100644 index 0000000..e764a8f --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/README.md" @@ -0,0 +1,273 @@ +# ํ† ๋งˆํ†  + +1. ์ž…๋ ฅ ์ค‘์— 0์ด ์—†์œผ๋ฉด 0 ๋ฐ˜ํ™˜ +2. ์•ˆ์ต์€ ํ† ๋งˆํ† ์— ๋Œ€ํ•ด์„œ ๋Œ๋ฉด์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 1๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ๊ตฌํ•˜๊ธฐ + - ๋งŒ์•ฝ 1์„ ๋ชป์ฐพ์œผ๋ฉด 1๋ฐ˜ํ™˜ + - ์ตœ๋‹จ ๊ฒฝ๋กœ ์ค‘ ๋ฐฉ๋ฌธํ–ˆ๋˜ ๊ณณ์€ ๋ฐฉ๋ฌธ ์ธํ•ด๋„ ๋จ. (์•„๋งˆ๋„..?) + - ๊ฒฐ๊ตญ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ์ด ๋‹ต์ด ๋ ๋“ฏ + +- 1๋ฒˆ์งธํ’€์ด [์‹œ๊ฐ„ ์ดˆ๊ณผ] +```python +import sys + +directions = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)] + +[M, N, H] = map(int, sys.stdin.readline()[:-1].split(' ')) + +tomato = [] + +for i in range(H): + tmp = [] + for j in range(N): + tmp.append(list(map(int, sys.stdin.readline()[:-1].split(' ')))) + tomato.append(tmp) + +def function(): + underripeTomatos = [] + isAllRipeTomatos = True + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 0: + underripeTomatos.append((i, j, k)) + isAllRipeTomatos = False + + if isAllRipeTomatos: return 0 + + days = 0 # ์•„๋ฌด ๊ฐ’ + + while(len(underripeTomatos)!=0): + visited = [] + target = underripeTomatos.pop(0) + if target not in visited: + tmp = isExistGoodTomato(target, visited) + if tmp == 0: return -1 + if days <= tmp: days = tmp + + return days + +def isExistGoodTomato(underripeTomato, parentvisited): + visited = [] + queue = [(underripeTomato, 1)] + while len(queue) != 0: + tmp = queue.pop(0) + target = tmp[0] + count = tmp[1] + if target not in visited: + visited.append(target) + for direction in directions: + x = target[2] + direction[2] + y = target[1] + direction[1] + z = target[0] + direction[0] + + if x<0 or y<0 or z<0 or x>=M or y>=N or z>=H: continue + elif tomato[z][y][x] == 1: return count + elif tomato[z][y][x] == -1: continue + else: + if (x, y, z) not in parentvisited: parentvisited.append((x, y, z)) + queue.append(((z, y, x), count + 1)) + return 0 + +print(function()) +``` + +- 2๋ฒˆ์งธํ’€์ด [์‹œ๊ฐ„ ์ดˆ๊ณผ] + - ๋А๋‚Œ ์ƒ visited์— ๋Œ€ํ•œ ํƒ์ƒ‰ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์–ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™์•„์„œ ๋ฐฐ์—ด ๋งˆํ‚น ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€๊ฒฝ + +```python +import sys + +directions = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)] + +[M, N, H] = map(int, sys.stdin.readline()[:-1].split(' ')) + +tomato = [] + +for i in range(H): + tmp = [] + for j in range(N): + tmp.append(list(map(int, sys.stdin.readline()[:-1].split(' ')))) + tomato.append(tmp) + +def function(): + underripeTomatos = [] + isAllRipeTomatos = True + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 0: + underripeTomatos.append((i, j, k)) + isAllRipeTomatos = False + + if isAllRipeTomatos: return 0 + + days = 0 # ์•„๋ฌด ๊ฐ’ + + while(len(underripeTomatos)!=0): + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + target = underripeTomatos.pop(0) + if not visited[target[0]][target[1]][target[2]]: + tmp = isExistGoodTomato(target, visited) + if tmp == 0: return -1 + if days <= tmp: days = tmp + + return days + +def isExistGoodTomato(underripeTomato, parentvisited): + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + queue = [(underripeTomato, 1)] + while len(queue) != 0: + tmp = queue.pop(0) + target = tmp[0] + count = tmp[1] + if not visited[target[0]][target[1]][target[2]]: + visited[target[0]][target[1]][target[2]] = True + for direction in directions: + x = target[2] + direction[2] + y = target[1] + direction[1] + z = target[0] + direction[0] + + if x<0 or y<0 or z<0 or x>=M or y>=N or z>=H: continue + elif tomato[z][y][x] == 1: return count + elif tomato[z][y][x] == -1: continue + else: + if not parentvisited[z][y][x]: parentvisited[z][y][x] = True + queue.append(((z, y, x), count + 1)) + return 0 + +print(function()) +``` + +- 3๋ฒˆ์งธํ’€์ด [์‹œ๊ฐ„ ์ดˆ๊ณผ] + - ๊ทธ๋ž˜๋„ ๊ฐ™์•„์„œ.. ๋ญ๊ฐ€ ๋ฌธ์ œ์ง€... ใ… ใ… ใ…  + - pop(0)์˜ ๋น„์šฉ์€ ์–ผ๋งˆ์ผ๊นŒ ๋ณด๋‹ˆ O(n) ๊ทธ๋ž˜์„œ ๋‚˜์˜จ ๊ฒƒ์ด ```deque.popleft()``` + +```python +import sys +from collections import deque + +directions = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)] + +[M, N, H] = map(int, sys.stdin.readline()[:-1].split(' ')) + +tomato = [] + +for i in range(H): + tmp = [] + for j in range(N): + tmp.append(list(map(int, sys.stdin.readline()[:-1].split(' ')))) + tomato.append(tmp) + +def function(): + underripeTomatos = deque() + isAllRipeTomatos = True + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 0: + underripeTomatos.append((i, j, k)) + isAllRipeTomatos = False + + if isAllRipeTomatos: return 0 + + days = 0 # ์•„๋ฌด ๊ฐ’ + + while(len(underripeTomatos)!=0): + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + target = underripeTomatos.popleft() + if not visited[target[0]][target[1]][target[2]]: + tmp = isExistGoodTomato(target, visited) + if tmp == 0: return -1 + if days <= tmp: days = tmp + + return days + +def isExistGoodTomato(underripeTomato, parentvisited): + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + queue = deque() + queue.append((underripeTomato, 1)) + + while len(queue) != 0: + tmp = queue.popleft() + target = tmp[0] + count = tmp[1] + if not visited[target[0]][target[1]][target[2]]: + visited[target[0]][target[1]][target[2]] = True + for direction in directions: + x = target[2] + direction[2] + y = target[1] + direction[1] + z = target[0] + direction[0] + + if x<0 or y<0 or z<0 or x>=M or y>=N or z>=H: continue + elif tomato[z][y][x] == 1: return count + elif tomato[z][y][x] == -1: continue + else: + if not parentvisited[z][y][x]: parentvisited[z][y][x] = True + queue.append(((z, y, x), count + 1)) + return 0 + +print(function()) +``` + +- 4๋ฒˆ์งธ ํ’€์ด [์„ฑ๊ณต ใ… ใ… ] + + - ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ณ€ํ™” + - ๊ทธ๋ƒฅ ์ตํ˜€๋ณด์ž ์•ˆ์ต์€๊ฑฐ ์ฐพ์ง€๋ง์•„๋ณด์ž + - ์œ„์˜ ๋ณต์žก๋„๊ฐ€ ์€๊ทผ ํฐ ๊ฒƒ ๊ฐ™๋‹ค.... + + ```python + import sys + from collections import deque + + directions = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)] + + [M, N, H] = map(int, sys.stdin.readline().split()) + + tomato = [] + + for i in range(H): + tmp = [] + for j in range(N): + tmp.append(list(map(int, sys.stdin.readline().split()))) + tomato.append(tmp) + + def function(): + ripeTomatos = deque() + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 1: + ripeTomatos.append((i, j, k, 0)) + + day = 0 + + while ripeTomatos: + z, y, x, day = ripeTomatos.popleft() + if tomato[z][y][x]==0: tomato[z][y][x] = 1 + for dx, dy, dz in directions: + nx, ny, nz = x+dx, y+dy, z+dz + if nx<0 or ny<0 or nz<0 or nx>=M or ny>=N or nz>=H: continue + if tomato[nz][ny][nx] == 0: + if not visited[nz][ny][nx]: + ripeTomatos.append((nz, ny, nx, day+1)) + visited[nz][ny][nx] = True + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 0: + return -1 + + return day + + sys.stdout.write(str(function())) + ``` + + + +์œ„์—์„œ ๋ฆฌํŒฉํ† ๋ง์„ ๋งŽ์ด ํ–ˆ๋Š”๋ฐ ๋‹ค์Œ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ๊ณ ํ•จ [[์ฐธ๊ณ ](https://www.acmicpc.net/blog/view/70)] \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/boj_7569.py" "b/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/boj_7569.py" new file mode 100644 index 0000000..08ecc1b --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/boj_7569.py" @@ -0,0 +1,65 @@ +import sys +from collections import deque + +directions = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)] + +[M, N, H] = map(int, sys.stdin.readline()[:-1].split(' ')) + +tomato = [] + +for i in range(H): + tmp = [] + for j in range(N): + tmp.append(list(map(int, sys.stdin.readline()[:-1].split(' ')))) + tomato.append(tmp) + +def function(): + underripeTomatos = deque() + isAllRipeTomatos = True + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 0: + underripeTomatos.append((i, j, k)) + isAllRipeTomatos = False + + if isAllRipeTomatos: return 0 + + days = 0 + + while underripeTomatos: + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + target = underripeTomatos.popleft() + if not visited[target[0]][target[1]][target[2]]: + tmp = isExistGoodTomato(target, visited) + if tmp == 0: return -1 + if days <= tmp: days = tmp + + return days + +def isExistGoodTomato(underripeTomato, parentvisited): + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + queue = deque() + queue.append((underripeTomato, 1)) + + while queue: + tmp = queue.popleft() + target = tmp[0] + count = tmp[1] + if not visited[target[0]][target[1]][target[2]]: + visited[target[0]][target[1]][target[2]] = True + for direction in directions: + x = target[2] + direction[2] + y = target[1] + direction[1] + z = target[0] + direction[0] + + if x<0 or y<0 or z<0 or x>=M or y>=N or z>=H: continue + elif tomato[z][y][x] == 1: return count + elif tomato[z][y][x] == -1: continue + else: + if not parentvisited[z][y][x]: parentvisited[z][y][x] = True + if not visited[z][y][z]: queue.append(((z, y, x), count + 1)) + return 0 + +sys.stdout.write(str(function())) \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/boj_7569_2.py" "b/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/boj_7569_2.py" new file mode 100644 index 0000000..8bf38b8 --- /dev/null +++ "b/src/Do-ho/dfsbfs/boj_7569_\355\206\240\353\247\210\355\206\240/boj_7569_2.py" @@ -0,0 +1,47 @@ +import sys +from collections import deque + +directions = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)] + +[M, N, H] = map(int, sys.stdin.readline().split()) + +tomato = [] + +for i in range(H): + tmp = [] + for j in range(N): + tmp.append(list(map(int, sys.stdin.readline().split()))) + tomato.append(tmp) + +def function(): + ripeTomatos = deque() + visited = [[[False for i in range(M)] for i in range(N)] for i in range(H)] + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 1: + ripeTomatos.append((i, j, k, 0)) + + day = 0 + + while ripeTomatos: + z, y, x, day = ripeTomatos.popleft() + if tomato[z][y][x]==0: tomato[z][y][x] = 1 + for dx, dy, dz in directions: + nx, ny, nz = x+dx, y+dy, z+dz + if nx<0 or ny<0 or nz<0 or nx>=M or ny>=N or nz>=H: continue + if tomato[nz][ny][nx] == 0: + if not visited[nz][ny][nx]: + ripeTomatos.append((nz, ny, nx, day+1)) + visited[nz][ny][nx] = True + + for i in range(H): + for j in range(N): + for k in range(M): + if tomato[i][j][k] == 0: + return -1 + + return day + +sys.stdout.write(str(function())) \ No newline at end of file diff --git "a/src/Do-ho/dfsbfs/pgs_\353\204\244\355\212\270\354\233\214\355\201\254/pgs_\353\204\244\355\212\270\354\233\214\355\201\254.js" "b/src/Do-ho/dfsbfs/pgs_\353\204\244\355\212\270\354\233\214\355\201\254/pgs_\353\204\244\355\212\270\354\233\214\355\201\254.js" new file mode 100644 index 0000000..9a04453 --- /dev/null +++ "b/src/Do-ho/dfsbfs/pgs_\353\204\244\355\212\270\354\233\214\355\201\254/pgs_\353\204\244\355\212\270\354\233\214\355\201\254.js" @@ -0,0 +1,26 @@ +const solution = (n, computers) => { + let answer = 0; + let visited = new Array(n).fill(false); + let queue = []; + const loopArray = [... new Array(n).keys()]; + const isEmpty = () => queue.length !== 0; + + const dfs = () => { + const targetIdx = queue.pop(); + const target = computers[targetIdx] + loopArray.forEach((idx) => { + if(visited[idx] || target[idx] === 0) return; + queue.push(idx); + visited[idx] = true; + }); + } + + loopArray.forEach((computerID) => { + if(visited[computerID]) return; + queue.push(computerID); + while(isEmpty()) dfs(); + answer++; + }) + + return answer; +} \ No newline at end of file diff --git "a/src/Do-ho/divide_conquer/boj_1780_\354\242\205\354\235\264\354\235\230\352\260\234\354\210\230/README.md" "b/src/Do-ho/divide_conquer/boj_1780_\354\242\205\354\235\264\354\235\230\352\260\234\354\210\230/README.md" new file mode 100644 index 0000000..8538798 --- /dev/null +++ "b/src/Do-ho/divide_conquer/boj_1780_\354\242\205\354\235\264\354\235\230\352\260\234\354\210\230/README.md" @@ -0,0 +1,226 @@ +# ์ข…์ด์˜ ๊ฐœ์ˆ˜ + +- ์ฒซ ๋ฒˆ์งธ ์‹œ๋„ (๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ) +```python +import sys +from collections import deque + +def conquer(arr): + L = len(arr) + A = L * L + minus_one = 0 + zero = 0 + one = 0 + + if A==1: return arr[0][0] + + for i in range(L): + for j in range(L): + if arr[i][j] == -1: minus_one += 1 + elif arr[i][j] == 0: zero += 1 + else: one += 1 + + if minus_one==A: return -1 + elif zero==A: return 0 + elif one==A: return 1 + else: return 2 + +def divide(arr): + L = len(arr) + + area = [deque() for i in range(9)] + k = int(L/3) + + for i in range(0, k): + area[0].append(arr[i][:k]) + area[1].append(arr[i][k:2*k]) + area[2].append(arr[i][2*k:]) + for i in range(k, 2*k): + area[3].append(arr[i][:k]) + area[4].append(arr[i][k:2*k]) + area[5].append(arr[i][2*k:]) + for i in range(2*k, L): + area[6].append(arr[i][:k]) + area[7].append(arr[i][k:2*k]) + area[8].append(arr[i][2*k:]) + + return area + +N = int(sys.stdin.readline()) + +paper = [] +minus_one_paper = 0 +one_paper = 0 +zero_paper = 0 + +for i in range(N): + paper.append(list(map(int, sys.stdin.readline().split()))) + +queue = deque() +queue.append(paper) + +while queue: + target = queue.popleft() + status = conquer(target) + if status == 0: zero_paper +=1 + elif status == 1: one_paper += 1 + elif status == -1: minus_one_paper += 1 + else: + queue.extend(divide(target)) + +sys.stdout.write(str(minus_one_paper)+'\n') +sys.stdout.write(str(zero_paper)+'\n') +sys.stdout.write(str(one_paper)+'\n') +``` + +- ๋‘ ๋ฒˆ์งธ ์‹œ๋„(์‹œ๊ฐ„์ดˆ๊ณผ) +```python +import sys +from collections import deque + +def conquer(arr): + L = len(arr) + A = L * L + minus_one = 0 + zero = 0 + one = 0 + + if A==1: return arr[0][0] + + for i in range(L): + for j in range(L): + if arr[i][j] == '-1': minus_one += 1 + elif arr[i][j] == '0': zero += 1 + else: one += 1 + + if minus_one==A: return '-1' + elif zero==A: return '0' + elif one==A: return '1' + else: return '2' + +def divide(arr): + L = len(arr) + + area = [deque() for i in range(9)] + k = int(L/3) + + for i in range(0, k): + area[0].append(arr[i][:k]) + area[1].append(arr[i][k:2*k]) + area[2].append(arr[i][2*k:]) + for i in range(k, 2*k): + area[3].append(arr[i][:k]) + area[4].append(arr[i][k:2*k]) + area[5].append(arr[i][2*k:]) + for i in range(2*k, L): + area[6].append(arr[i][:k]) + area[7].append(arr[i][k:2*k]) + area[8].append(arr[i][2*k:]) + + return area + +def f(arr): + minus_one_paper = 0 + zero_paper = 0 + one_paper = 0 + + status = conquer(arr) + if status == '0': zero_paper +=1 + elif status == '1': one_paper += 1 + elif status == '-1': minus_one_paper += 1 + else: + dividearr = divide(arr) + for da in dividearr: + result = f(da) + minus_one_paper += result[0] + zero_paper += result[1] + one_paper += result[2] + + return [minus_one_paper, zero_paper, one_paper] + +N = int(sys.stdin.readline()) + +paper = [] + +for i in range(N): + paper.append(sys.stdin.readline().split()) + +papernum = f(paper) + +sys.stdout.write(str(papernum[0])+'\n') +sys.stdout.write(str(papernum[1])+'\n') +sys.stdout.write(str(papernum[2])+'\n') +``` + +- ์„ธ ๋ฒˆ์งธ ์‹œ๋„(์„ฑ๊ณต) +```python +import sys +from collections import deque + +def conquer(arr): + L = len(arr) + A = L * L + + if A==1: return arr[0][0] + + check = arr[0][0] + + for i in range(L): + for j in range(L): + if arr[i][j] != check: return "-2" + + return check + +def divide(arr): + L = len(arr) + + area = [deque() for i in range(9)] + k = int(L/3) + + for i in range(0, k): + area[0].append(arr[i][:k]) + area[1].append(arr[i][k:2*k]) + area[2].append(arr[i][2*k:]) + for i in range(k, 2*k): + area[3].append(arr[i][:k]) + area[4].append(arr[i][k:2*k]) + area[5].append(arr[i][2*k:]) + for i in range(2*k, L): + area[6].append(arr[i][:k]) + area[7].append(arr[i][k:2*k]) + area[8].append(arr[i][2*k:]) + + return area + +def f(arr): + minus_one_paper = 0 + zero_paper = 0 + one_paper = 0 + + status = conquer(arr) + if status == '0': zero_paper +=1 + elif status == '1': one_paper += 1 + elif status == '-1': minus_one_paper += 1 + else: + dividearr = divide(arr) + for da in dividearr: + result = f(da) + minus_one_paper += result[0] + zero_paper += result[1] + one_paper += result[2] + + return [minus_one_paper, zero_paper, one_paper] + +N = int(sys.stdin.readline()) + +paper = [] + +for i in range(N): + paper.append(sys.stdin.readline().split()) + +papernum = f(paper) + +sys.stdout.write(str(papernum[0])+'\n') +sys.stdout.write(str(papernum[1])+'\n') +sys.stdout.write(str(papernum[2])+'\n') +``` \ No newline at end of file diff --git "a/src/Do-ho/divide_conquer/boj_1780_\354\242\205\354\235\264\354\235\230\352\260\234\354\210\230/boj_1780.py" "b/src/Do-ho/divide_conquer/boj_1780_\354\242\205\354\235\264\354\235\230\352\260\234\354\210\230/boj_1780.py" new file mode 100644 index 0000000..5353c61 --- /dev/null +++ "b/src/Do-ho/divide_conquer/boj_1780_\354\242\205\354\235\264\354\235\230\352\260\234\354\210\230/boj_1780.py" @@ -0,0 +1,69 @@ +import sys +from collections import deque + +def conquer(arr): + L = len(arr) + A = L * L + + if A==1: return arr[0][0] + + check = arr[0][0] + + for i in range(L): + for j in range(L): + if arr[i][j] != check: return "-2" + + return check + +def divide(arr): + L = len(arr) + + area = [deque() for i in range(9)] + k = int(L/3) + + for i in range(0, k): + area[0].append(arr[i][:k]) + area[1].append(arr[i][k:2*k]) + area[2].append(arr[i][2*k:]) + for i in range(k, 2*k): + area[3].append(arr[i][:k]) + area[4].append(arr[i][k:2*k]) + area[5].append(arr[i][2*k:]) + for i in range(2*k, L): + area[6].append(arr[i][:k]) + area[7].append(arr[i][k:2*k]) + area[8].append(arr[i][2*k:]) + + return area + +def f(arr): + minus_one_paper = 0 + zero_paper = 0 + one_paper = 0 + + status = conquer(arr) + if status == '0': zero_paper +=1 + elif status == '1': one_paper += 1 + elif status == '-1': minus_one_paper += 1 + else: + dividearr = divide(arr) + for da in dividearr: + result = f(da) + minus_one_paper += result[0] + zero_paper += result[1] + one_paper += result[2] + + return [minus_one_paper, zero_paper, one_paper] + +N = int(sys.stdin.readline()) + +paper = [] + +for i in range(N): + paper.append(sys.stdin.readline().split()) + +papernum = f(paper) + +sys.stdout.write(str(papernum[0])+'\n') +sys.stdout.write(str(papernum[1])+'\n') +sys.stdout.write(str(papernum[2])+'\n') \ No newline at end of file diff --git "a/src/Do-ho/divide_conquer/boj_1992_\354\277\274\353\223\234\355\212\270\353\246\254/boj_1992.py" "b/src/Do-ho/divide_conquer/boj_1992_\354\277\274\353\223\234\355\212\270\353\246\254/boj_1992.py" new file mode 100644 index 0000000..344c380 --- /dev/null +++ "b/src/Do-ho/divide_conquer/boj_1992_\354\277\274\353\223\234\355\212\270\353\246\254/boj_1992.py" @@ -0,0 +1,60 @@ +import sys +from collections import deque + +def conquer(arr): + L = len(arr) + A = L * L + one = 0 + zero = 0 + + if A==1: return arr[0][0] + + for i in range(L): + for j in range(L): + if arr[i][j] == '1': one += 1 + else: zero += 1 + + if one==A: return '1' + elif zero==A: return '0' + else: return '-1' + +def divide(arr): + L = len(arr) + + area1 = deque() + area2 = deque() + area3 = deque() + area4 = deque() + + for i in range(0, int(L/2)): + area1.append(arr[i][:int(L/2)]) + area2.append(arr[i][int(L/2):]) + for i in range(int(L/2), L): + area3.append(arr[i][:int(L/2)]) + area4.append(arr[i][int(L/2):]) + + return [area1, area2, area3, area4] + +def quad(arr): + result = "" + status = conquer(arr) + + if status == '0': result += "0" + elif status == '1': result += "1" + else: + result += "(" + dividearr = divide(arr) + for da in dividearr: + result += quad(da) + result += ")" + return result + +N = int(sys.stdin.readline()) + +video = [] + +for i in range(N): + value = sys.stdin.readline() + video.append(value) + +sys.stdout.write(quad(video)) \ No newline at end of file diff --git "a/src/Do-ho/divide_conquer/boj_2630_\354\203\211\354\242\205\354\235\264\353\247\214\353\223\244\352\270\260/boj_2630.py" "b/src/Do-ho/divide_conquer/boj_2630_\354\203\211\354\242\205\354\235\264\353\247\214\353\223\244\352\270\260/boj_2630.py" new file mode 100644 index 0000000..77dbb1e --- /dev/null +++ "b/src/Do-ho/divide_conquer/boj_2630_\354\203\211\354\242\205\354\235\264\353\247\214\353\223\244\352\270\260/boj_2630.py" @@ -0,0 +1,59 @@ +import sys +from collections import deque + +def conquer(arr): + L = len(arr) + A = L * L + white = 0 + blue = 0 + + if A==1: return arr[0][0] + + for i in range(L): + for j in range(L): + if arr[i][j] == 0: white += 1 + else: blue += 1 + + if white==A: return 0 + elif blue==A: return 1 + else: return -1 + +def divide(arr): + L = len(arr) + + area1 = deque() + area2 = deque() + area3 = deque() + area4 = deque() + + for i in range(0, int(L/2)): + area1.append(arr[i][:int(L/2)]) + area2.append(arr[i][int(L/2):]) + for i in range(int(L/2), L): + area3.append(arr[i][:int(L/2)]) + area4.append(arr[i][int(L/2):]) + + return [area1, area2, area3, area4] + +N = int(sys.stdin.readline()) + +paper = [] +white_paper = 0 +blue_paper = 0 + +for i in range(N): + paper.append(list(map(int, sys.stdin.readline().split()))) + +queue = deque() +queue.append(paper) + +while queue: + target = queue.popleft() + status = conquer(target) + if status == 0: white_paper +=1 + elif status == 1: blue_paper += 1 + else: + queue.extend(divide(target)) + +print(white_paper) +print(blue_paper) \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_1010_\353\213\244\353\246\254\353\206\223\352\270\260/README.md" "b/src/Do-ho/dp/boj_1010_\353\213\244\353\246\254\353\206\223\352\270\260/README.md" new file mode 100644 index 0000000..0411f88 --- /dev/null +++ "b/src/Do-ho/dp/boj_1010_\353\213\244\353\246\254\353\206\223\352\270\260/README.md" @@ -0,0 +1,19 @@ +# ๋‹ค๋ฆฌ ๋†“๊ธฐ + +f(1, 1) = 1 +f(1, 2) = 2 +f(1, 3) = 3 +~~ + +f(2, 2) = f(1, 1) +f(2, 3) = f(1, 2) + f(1, 1) +f(2, 4) = f(1, 3) + f(1, 2) + f(1, 1) = f(1, 3) + f(2, 3) +f(3, 3) = f(2, 2) +f(3, 4) = f(2, 3) + f(2, 2) +f(3, 5) = f(2, 4) + f(2, 3) + f(2, 2) = f(2, 4) + f(3, 4) + +๋”ฐ๋ผ์„œ ์ ํ™”์‹ + +f(n, k) = f(n-1, k-1) + f(n, k-1) + = f(n, k-1) + f(n-1, k-1) + diff --git "a/src/Do-ho/dp/boj_1010_\353\213\244\353\246\254\353\206\223\352\270\260/boj_1010.py" "b/src/Do-ho/dp/boj_1010_\353\213\244\353\246\254\353\206\223\352\270\260/boj_1010.py" new file mode 100644 index 0000000..26395dc --- /dev/null +++ "b/src/Do-ho/dp/boj_1010_\353\213\244\353\246\254\353\206\223\352\270\260/boj_1010.py" @@ -0,0 +1,19 @@ +import sys + +D = [[0 for _ in range(30)] for _ in range(30)] + +def f(i, j): + if j ์–ด๋–ค ๋ฌธ์ œ์˜ ์ž…๋ ฅ์‚ฌ๋ก€์˜ ์ตœ์ ํ•ด๊ฐ€ ๊ทธ ์ž…๋ ฅ์‚ฌ๋ก€๋ฅผ ๋ถ„ํ• ํ•œ ๋ถ€๋ถ„์‚ฌ๋ก€์— ๋Œ€ํ•œ ์ตœ์ ํ•ด๋ฅผ ํ•ญ์ƒ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉด, ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•˜์—ฌ ์ตœ์ ์˜ ์›๋ฆฌ๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค. + +### [์ฐธ๊ณ ](https://gsmesie692.tistory.com/113) + +1๊ฐœ. 2๊ฐœ. 3๊ฐœ + +2์ฐจ์› ๋ฐฐ์—ด์ ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณผ๊นŒ? + +W V +6 13 +4 8 +3 6 +5 12 + +D[i][k] = i๋ฒˆ์งธ ๋ฌผ๊ฑด๊นŒ์ง€ ์‚ฌ์šฉํ•˜์—ฌ k ์šฉ๋Ÿ‰์˜ ๊ฐ€๋ฐฉ์— ๋ฌผ๊ฑด์„ ์ฑ„์šธ๋•Œ ์ตœ๋Œ€ ๊ฐ€์น˜ + +[0, 0, 0, 0, 0, 13, 13] +[0, 0, 0, 8, 8, 13, 13] +[0, 0, 6, 8, 8, 13, 14] +[0, 0, 6, 8, 12, 13, 14] + +์ด ๋ฌธ์ œ๋ฅผ ๋ดค์„ ๋•Œ D[i][j] = V[i] + D[i-1][j-w[i]]์˜ ์ ํ™”์‹์ด ์ ์šฉ๋œ๋‹ค. +์—ฌ๊ธฐ์„œ j๋Š” ํ˜„์žฌ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฐ๋‚ญ์˜ ๋ฌด๊ฒŒ w[i]๋Š” i์˜ ๋ฌด๊ฒŒ์ด๋‹ค. +ํ˜„์žฌ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฐ๋‚ญ์˜ ๋ฌด๊ฒŒ - ๋„ฃ์œผ๋ ค๊ณ ํ•˜๋Š” ๊ฒƒ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋นผ๋ฉด +์ง€๊ธˆ๊นŒ์ง€ ์•Œ์•„์˜จ ๋ฐฐ๋‚ญ ๋ฐฐ์—ด์—์„œ ๊ทธ ๋ฌด๊ฒŒ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์ตœ์ ์ด๋ฏ€๋กœ +๊ฒ€์‚ฌ ๋Œ€์ƒ์ด๋‹ค. + +๊ฒฐ๊ตญ +w[i] > j D[i][j] = D[i-1][j] +w[i] <= j D[i][j] = max(V[i] + D[i-1][j-w[i]] , D[i-1][j]) + +ํ•˜๋ฉด ๋œ๋‹ค. \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_12865_\355\217\211\353\262\224\355\225\234\353\260\260\353\202\255/boj_12865.py" "b/src/Do-ho/dp/boj_12865_\355\217\211\353\262\224\355\225\234\353\260\260\353\202\255/boj_12865.py" new file mode 100644 index 0000000..48e38aa --- /dev/null +++ "b/src/Do-ho/dp/boj_12865_\355\217\211\353\262\224\355\225\234\353\260\260\353\202\255/boj_12865.py" @@ -0,0 +1,19 @@ +# w[i] > j D[i][j] = D[i-1][j] +# w[i] <= j D[i][j] = max(V[i] + D[i-1][j-w[i]] , D[i-1][j]) + +import sys + +[N, K] = map(int, sys.stdin.readline().strip().split()) + +B = [] +D = [[0 for _ in range(K)] for _ in range(N)] + +for _ in range(N): + B.append(list(map(int, sys.stdin.readline().strip().split()))) + +for i in range(N): + if i==1: + D[i][B[0][0]] = B[0][1] + continue + for j in range(K): + \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_1932_\354\240\225\354\210\230\354\202\274\352\260\201\355\230\225/README.md" "b/src/Do-ho/dp/boj_1932_\354\240\225\354\210\230\354\202\274\352\260\201\355\230\225/README.md" new file mode 100644 index 0000000..c6b31ea --- /dev/null +++ "b/src/Do-ho/dp/boj_1932_\354\240\225\354\210\230\354\202\274\352\260\201\355\230\225/README.md" @@ -0,0 +1,5 @@ +# ์ •์ˆ˜์‚ผ๊ฐํ˜• + +D์— ์ €์žฅํ•˜๋ฉด์„œ ๋ฐ‘์œผ๋กœ ๋‚ด๋ ค๊ฐ + +๋งจ ์™ผ์ชฝ์— ๋Œ€ํ•ด์„œ๋งŒ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋ฉด ์ข‹์„๋“ฏ \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_1932_\354\240\225\354\210\230\354\202\274\352\260\201\355\230\225/boj_1932.py" "b/src/Do-ho/dp/boj_1932_\354\240\225\354\210\230\354\202\274\352\260\201\355\230\225/boj_1932.py" new file mode 100644 index 0000000..3a8f9d9 --- /dev/null +++ "b/src/Do-ho/dp/boj_1932_\354\240\225\354\210\230\354\202\274\352\260\201\355\230\225/boj_1932.py" @@ -0,0 +1,22 @@ +import sys + +n = int(sys.stdin.readline()) + +D = [[0 for _ in range(n)] for _ in range(n)] + +def f(idx): + return 0 + +triangle = [] + +for i in range(n): + triangle.append(list(map(int, sys.stdin.readline().strip().split()))) + +D[0][0] = triangle[0][0] + +for i in range(1, n): + for j in range(i+1): + try: D[i][j] = triangle[i][j] + max(D[i-1][j-1], D[i-1][j]) + except: D[i][j] = triangle[i][j] + D[i-1][j] + +print(max(D[n-1])) \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_2011_\354\225\224\355\230\270\354\275\224\353\223\234/README.md" "b/src/Do-ho/dp/boj_2011_\354\225\224\355\230\270\354\275\224\353\223\234/README.md" new file mode 100644 index 0000000..166aa82 --- /dev/null +++ "b/src/Do-ho/dp/boj_2011_\354\225\224\355\230\270\354\275\224\353\223\234/README.md" @@ -0,0 +1,40 @@ +# ์•”ํ˜ธ์ฝ”๋“œ + +ํƒ‘๋‹ค์šด์œผ๋กœ ์ƒ๊ฐํ•ด์„œ ์ ์šฉํ•ด๋ด„ ์žฌ๊ท€ ๋„ˆ๋ฌด ๋งŽ์ด ๋„๋Š” ๋“ฏ.. +```๋Ÿฐ๋‹ค์ž„ ์—๋Ÿฌ``` + +``` +import sys + +def isDivision(n): + return n>=10 and n<=26 + +def DP(n, l): + if (l<=0): return 0 + if (l==1): return 1 + if (l==2): + if(isDivision(int(n[:l]))): return 2 + return 1 + if(isDivision(int(n[l-2:l]))): return DP(n, l-1) + DP(n, l-2) + return DP(n, l-1) + +N = sys.stdin.readline().strip() +L = len(N) + +print(DP(N, L)%1000000) +``` + +๋ฐ”ํ…€ ์—…์œผ๋กœ ํ’€์–ด๋ณด์ž.... + +D(n) = D(n-1) + D(n-2) (๋ถ„๊ธฐ๊ฐ€ ๋  ๊ฒฝ์šฐ) +D(n) = D(n-1) (๋ถ„๊ธฐ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ) + +์ž…๋ ฅ์ด 0์ธ๊ฒƒ๋„ ์ฒ˜๋ฆฌ... + +๋ฐ˜๋ก€ ์ฐพ๊ธฐ... +1. 100์ผ๋•Œ -> 0 +2. 36036์ผ๋•Œ -> 0 + +0์•ž์— 1๊ฐœ๋‚˜ 2๊ฐœ๊ฐ€ ์ž˜๋ชป๋˜๋ฉด ์•ˆ๋จ + +100 \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_2011_\354\225\224\355\230\270\354\275\224\353\223\234/boj_2011.py" "b/src/Do-ho/dp/boj_2011_\354\225\224\355\230\270\354\275\224\353\223\234/boj_2011.py" new file mode 100644 index 0000000..56dce24 --- /dev/null +++ "b/src/Do-ho/dp/boj_2011_\354\225\224\355\230\270\354\275\224\353\223\234/boj_2011.py" @@ -0,0 +1,41 @@ +import sys + +def isAlpha(n): + return int(n)>=1 and int(n)<=26 + +def isDivision(n): + return int(n)>10 and int(n)<=26 and int(n)!=20 + +def validation(n): + if(n[0]=='0'): return False + prev = n[0] + for i in range(1, len(n)): + if(n[i]=='0' and (prev != '1' and prev != '2')): return False + prev = n[i] + return True + +def decode(N): + L = len(N) + 1 + D = [0 for _ in range(L)] + if(not validation(N)): return 0 + D[0] = 1 + + if(isDivision(N[:2])): D[1] = 2 + else: D[1] = 1 + + if(L > 2): prev = N[1] + + for i in range(2, len(N)): + target = N[i] + word = prev + target + if(word=='10' or word=='20'): D[i] = D[i-2] + elif(not isAlpha(word)): D[i] = D[i-1] + elif(prev == '0'): D[i] = D[i-2] + elif(target == '0'): D[i] = D[i-2] + else: D[i] = D[i-1] + D[i-2] + prev = N[i] + print(D) + return D[L-2] % 1000000 + +N = sys.stdin.readline().strip() +print(decode(N)) \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/README.md" "b/src/Do-ho/dp/boj_2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/README.md" new file mode 100644 index 0000000..1e27c9a --- /dev/null +++ "b/src/Do-ho/dp/boj_2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/README.md" @@ -0,0 +1,62 @@ +# ๋–ก ๋จน๋Š” ํ˜ธ๋ž‘์ด + +R3 = R2 + R1 +R4 = R3 + R2 = R2 + R2 + R1 = 2R2 + R1 +R5 = R4 + R3 = 2R3 + R2 = 2(R2 + R1) + R2 = 3R2 + 2R1 +R6 = R5 + R4 = 2R4 + R3 = 2(2R2 + R1) + (R2 + R1) = 5R2 + 3R1 + +๊ณ„์ˆ˜๊ฐ€ ๊ทœ์น™์ด ์žˆ๋Š”๋“ฏ! + +1 1 2 3 5 8 13 + +ํ”ผ๋ณด๋‚˜์น˜๋กœ ์ฆ๊ฐ€ + +R3 = 1 1 >> ์–˜๊ฐ€ 1 1์œผ๋กœ ์‹œ์ž‘ํ•˜๋‹ˆ ๋ฐ˜๋ณต ์‹œ์ž‘ํ•˜๋ฉด ๋ ๋“ฏ + +``` +import sys + +def calculate(a, b, A, B): + return a*A + b*B + +D, K = map(int, sys.stdin.readline().rstrip().split()) + +FIBO = [1 for _ in range(D)] +for i in range(2, D): + FIBO[i] = FIBO[i-1] + FIBO[i-2] + +a, b = FIBO[D-3], FIBO[D-2] + +def getResult(): + for i in range(1, K): + for j in range(1, K): + result = calculate(a, b, i, j) + if(result > K): break + if(result==K): + return str(i)+'\n'+str(j)+'\n' + +sys.stdout.write(getResult()) +``` + +๋ฐ˜๋ณต๋ฌธ ํ•˜๋‚˜ ์ค„์ด๊ธฐ +``` +import sys + +def calculate(a, b, A, B): + return a*A + b*B + +D, K = map(int, sys.stdin.readline().rstrip().split()) + +FIBO = [1 for _ in range(D)] +for i in range(2, D): + FIBO[i] = FIBO[i-1] + FIBO[i-2] + +a, b = FIBO[D-3], FIBO[D-2] + +def getResult(): + for i in range(1, K): + j = (K - a*i)/b + if j.is_integer(): return str(i)+'\n'+str(int(j))+'\n' + +sys.stdout.write(getResult()) +``` \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/boj_2502.py" "b/src/Do-ho/dp/boj_2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/boj_2502.py" new file mode 100644 index 0000000..f32c5d7 --- /dev/null +++ "b/src/Do-ho/dp/boj_2502_\353\226\241\353\250\271\353\212\224\355\230\270\353\236\221\354\235\264/boj_2502.py" @@ -0,0 +1,19 @@ +import sys + +def calculate(a, b, A, B): + return a*A + b*B + +D, K = map(int, sys.stdin.readline().rstrip().split()) + +FIBO = [1 for _ in range(D)] +for i in range(2, D): + FIBO[i] = FIBO[i-1] + FIBO[i-2] + +a, b = FIBO[D-3], FIBO[D-2] + +def getResult(): + for i in range(1, K): + j = (K - a*i)/b + if j.is_integer(): return str(i)+'\n'+str(int(j))+'\n' + +sys.stdout.write(getResult()) \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_2579_\352\263\204\353\213\250\354\230\244\353\245\264\352\270\260/README.md" "b/src/Do-ho/dp/boj_2579_\352\263\204\353\213\250\354\230\244\353\245\264\352\270\260/README.md" new file mode 100644 index 0000000..89fc4bf --- /dev/null +++ "b/src/Do-ho/dp/boj_2579_\352\263\204\353\213\250\354\230\244\353\245\264\352\270\260/README.md" @@ -0,0 +1,19 @@ +# ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ + +์ฒ˜์Œ ์ƒ๊ฐ๋‚œ ๊ฒƒ์€ ๋ฒ ์Šคํ‚จ๋ผ๋นˆ์Šค ์ƒ๊ฐ๋‚จ... +ํ•„์Šน๋ฒ•.. + +๋งˆ์ง€๋ง‰์„ ๋ฌด์กฐ๊ฑด ๋ถ€๋ฅด๋ฉด ์ง€๋Š” ๊ฒŒ์ž„์—์„œ ๋˜‘๊ฐ™์ด 3๋‹จ๊ณ„๋ฅผ ๊ณ ๋ คํ–ˆ์„ ๋•Œ +4๋‹จ๊ณ„๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ์ด๊ธฐ๋Š” ๊ฒŒ์ž„ + +๋งˆ์ง€๋ง‰์„ ๋ฌด์กฐ๊ฑด ๋ฐŸ์•„์•ผํ•˜๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์œผ๋กœ๋ถ€ํ„ฐ ํ•„์Šน๋ฒ•์„ ์ƒ๊ฐ! + +๋งˆ์ง€๋ง‰ ์ด์ „๊บผ๋ฅผ ๋ฐŸ์„ ๊ฒฝ์šฐ = ๋งˆ์ง€๋ง‰ ์ ์ˆ˜ + ๋งˆ์ง€๋ง‰ ์ด์ „๊บผ ์ ์ˆ˜ + ๋งˆ์ง€๋ง‰ ์ „์ „์ „๊บผ๊นŒ์ง€์˜ ์ตœ๊ณ ๊ฐ’ + +๋งˆ์ง€๋ง‰ ์ „์ „๊บผ๋ฅผ ๋ฐŸ๋Š” ๊ฒฝ์šฐ = ๋งˆ์ง€๋ง‰ ์ ์ˆ˜ + ๋งˆ์ง€๋ง‰ ์ „์ „๊บผ๊นŒ์ง€์˜ ์ตœ๊ณ ๊ฐ’ + +์ ํ™”์‹์œผ๋กœ ๋ณด๋ฉด + +f(n) = s(n) + s(n-1) + f(n-3) +f(n) = s(n) + f(n-2) +๋‹จ n>3 \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_2579_\352\263\204\353\213\250\354\230\244\353\245\264\352\270\260/boj_2579.py" "b/src/Do-ho/dp/boj_2579_\352\263\204\353\213\250\354\230\244\353\245\264\352\270\260/boj_2579.py" new file mode 100644 index 0000000..cbbda76 --- /dev/null +++ "b/src/Do-ho/dp/boj_2579_\352\263\204\353\213\250\354\230\244\353\245\264\352\270\260/boj_2579.py" @@ -0,0 +1,17 @@ +import sys + +T = int(sys.stdin.readline()) +S = [0 for _ in range(T)] +D = [0 for _ in range(T)] + +for i in range(T): + S[i] = int(sys.stdin.readline()) + +D[0] = S[0] +if T>1: D[1] = S[1] + D[0] +if T>2: D[2] = max(S[0]+S[2], S[1]+S[2]) + +for i in range(3, T): + D[i] = max(S[i] + S[i-1] + D[i-3], S[i] + D[i-2]) + +print(D[T-1]) \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_9096_123\353\215\224\355\225\230\352\270\260/README.md" "b/src/Do-ho/dp/boj_9096_123\353\215\224\355\225\230\352\270\260/README.md" new file mode 100644 index 0000000..c272261 --- /dev/null +++ "b/src/Do-ho/dp/boj_9096_123\353\215\224\355\225\230\352\270\260/README.md" @@ -0,0 +1,32 @@ +# 1,2,3 ๋”ํ•˜๊ธฐ + +1์ผ ๋•Œ +1 + +2์ผ ๋•Œ +1+1 +2 + +3์ผ ๋•Œ +1+1+1 +1+2 +2+1 +3 + +4์ผ ๋•Œ +1+1+1+1 +1+1+2 +1+2+1 +2+1+1 +2+2 +1+3 +3+1 + +1์˜ ๊ฒฝ์šฐ์— ์ˆ˜์— 3์„ ๋”ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ +2์˜ ๊ฒฝ์šฐ์— ์ˆ˜์— 2๋ฅผ ๋”ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ +3์˜ ๊ฒฝ์šฐ์— ์ˆ˜์— 1์„ ๋”ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ + +F(1) + 3 -> 1 +F(2) + 2 -> 2 +F(3) + 1 -> 4 +F(4) = F(1) + F(2) + F(3) = 7 \ No newline at end of file diff --git "a/src/Do-ho/dp/boj_9096_123\353\215\224\355\225\230\352\270\260/boj_9095.py" "b/src/Do-ho/dp/boj_9096_123\353\215\224\355\225\230\352\270\260/boj_9095.py" new file mode 100644 index 0000000..b6b2e95 --- /dev/null +++ "b/src/Do-ho/dp/boj_9096_123\353\215\224\355\225\230\352\270\260/boj_9095.py" @@ -0,0 +1,15 @@ +import sys + +T = int(sys.stdin.readline()) + +D = [0 for _ in range(12)] +D[1] = 1 +D[2] = 2 +D[3] = 4 + +for i in range(4, 12): + D[i] = D[i-3] + D[i-2] + D[i-1] + +for _ in range(T): + n = int(sys.stdin.readline()) + sys.stdout.write(str(D[n])+'\n') \ No newline at end of file diff --git "a/src/Do-ho/greedy/boj_11047_\353\217\231\354\240\2040/README.md" "b/src/Do-ho/greedy/boj_11047_\353\217\231\354\240\2040/README.md" new file mode 100644 index 0000000..009dbe1 --- /dev/null +++ "b/src/Do-ho/greedy/boj_11047_\353\217\231\354\240\2040/README.md" @@ -0,0 +1,64 @@ +# ๋™์ „ 0 + +- 1๋ฒˆ ์งธ ์‹œ๋„ (์‹œ๊ฐ„ ์ดˆ๊ณผ) +```python +import sys + +def diff(a, b): + return a-b + +[N, K] = map(int, sys.stdin.readline().split()) + +coinKinds = [] + +for _ in range(N): + coinKinds.append(int(sys.stdin.readline())) + +coinKinds.sort() + +count = 0 +while K!=0: + mindiff = diff(K, coinKinds[0]) + for coinKind in coinKinds: + value = diff(K, coinKind) + if value < 0: break + if mindiff > value: + mindiff = value + K = mindiff + count += 1 + +print(count) +``` + +- 2๋ฒˆ์งธ ์‹œ๋„ (ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ) +```python +import sys + +def diff(a, b): + return a-b + +[N, K] = map(int, sys.stdin.readline().split()) + +coinKinds = [] + +for _ in range(N): + coinKinds.append(int(sys.stdin.readline())) + +coinKinds.sort() + +count = 0 +while K!=0: + mindiff = diff(K, coinKinds[0]) + minIdx = 0 + for idx, coinKind in enumerate(coinKinds): + value = diff(K, coinKind) + if value < 0: break + if mindiff > value: + mindiff = value + minIdx = idx + count += K//coinKinds[minIdx] + K -= coinKinds[minIdx] * (K//coinKinds[minIdx]) + + +print(count) +``` \ No newline at end of file diff --git "a/src/Do-ho/greedy/boj_11047_\353\217\231\354\240\2040/boj_11047.py" "b/src/Do-ho/greedy/boj_11047_\353\217\231\354\240\2040/boj_11047.py" new file mode 100644 index 0000000..04d5026 --- /dev/null +++ "b/src/Do-ho/greedy/boj_11047_\353\217\231\354\240\2040/boj_11047.py" @@ -0,0 +1,29 @@ +import sys + +def diff(a, b): + return a-b + +[N, K] = map(int, sys.stdin.readline().split()) + +coinKinds = [] + +for _ in range(N): + coinKinds.append(int(sys.stdin.readline())) + +coinKinds.sort() + +count = 0 +while K!=0: + mindiff = diff(K, coinKinds[0]) + minIdx = 0 + for idx, coinKind in enumerate(coinKinds): + value = diff(K, coinKind) + if value < 0: break + if mindiff > value: + mindiff = value + minIdx = idx + count += K//coinKinds[minIdx] + K -= coinKinds[minIdx] * (K//coinKinds[minIdx]) + + +print(count) \ No newline at end of file diff --git a/src/Do-ho/greedy/boj_11399_ATM/README.md b/src/Do-ho/greedy/boj_11399_ATM/README.md new file mode 100644 index 0000000..3b8b2ed --- /dev/null +++ b/src/Do-ho/greedy/boj_11399_ATM/README.md @@ -0,0 +1,27 @@ +# ATM + +case +``` 3 1 4 3 2 ``` + +3 +3 + 1 = 4 +3 + 1 + 4 = 8 +3 + 1 + 4 + 3 = 11 +3 + 1 + 4 + 3 + 2 = 13 + +3 + 4 + 8 + 11 + 13 = 39 + +------- + +case +``` 1 2 3 3 4 ``` + +1 +1 + 2 = 3 +1 + 2 + 3 = 6 +1 + 2 + 3 + 3 = 9 +1 + 2 + 3 + 3 + 4 = 13 + +1 + 3 + 6 + 9 + 13 = 32 + +sort()ํ•œ๊ฒŒ ์ œ์ผ ์ข‹๋‹ค! \ No newline at end of file diff --git a/src/Do-ho/greedy/boj_11399_ATM/boj_11399.py b/src/Do-ho/greedy/boj_11399_ATM/boj_11399.py new file mode 100644 index 0000000..797a2dd --- /dev/null +++ b/src/Do-ho/greedy/boj_11399_ATM/boj_11399.py @@ -0,0 +1,15 @@ +import sys + +N = int(sys.stdin.readline()) +P = list(map(int, sys.stdin.readline().strip().split())) + +P.sort() + +Psum = 0 +offset = 0 + +for item in P: + offset += item + Psum += offset + +sys.stdout.write(str(Psum) + '\n') \ No newline at end of file diff --git "a/src/Do-ho/greedy/boj_11497_\355\206\265\353\202\230\353\254\264/boj_11497.py" "b/src/Do-ho/greedy/boj_11497_\355\206\265\353\202\230\353\254\264/boj_11497.py" new file mode 100644 index 0000000..f01ed09 --- /dev/null +++ "b/src/Do-ho/greedy/boj_11497_\355\206\265\353\202\230\353\254\264/boj_11497.py" @@ -0,0 +1,27 @@ +import sys +from collections import deque + +def diff(a, b): + return abs(a-b) + +T = int(sys.stdin.readline()) + +for _ in range(T): + N = int(sys.stdin.readline()) + tongtree = list(map(int, sys.stdin.readline().split())) + newtongtree = deque() + tongtree.sort() + + for item in tongtree: + topIdx = len(newtongtree) + if topIdx <= 1: newtongtree.append(item) + else: + if newtongtree[0] > newtongtree[topIdx-1]: newtongtree.append(item) + else: newtongtree.appendleft(item) + + maxDiff = diff(newtongtree[0], newtongtree[1]) + for idx in range(N-1): + value = diff(newtongtree[idx], newtongtree[idx+1]) + if maxDiff < value: maxDiff = value + + print(maxDiff) \ No newline at end of file diff --git "a/src/Do-ho/greedy/boj_17609_\355\232\214\353\254\270/README.md" "b/src/Do-ho/greedy/boj_17609_\355\232\214\353\254\270/README.md" new file mode 100644 index 0000000..7b35e21 --- /dev/null +++ "b/src/Do-ho/greedy/boj_17609_\355\232\214\353\254\270/README.md" @@ -0,0 +1,90 @@ +# ํšŒ๋ฌธ + +### ์‹œ๊ฐ„์ดˆ๊ณผ... + +``` +import sys + +def isPalindrome(S): + return S == S[::-1] + +def isPseudoPalindrome(S): + for i in range(len(S)): + if(isPalindrome(S[:i] + S[i+1:])): return True + return False + +def palindrome(S): + if(isPalindrome(S)): return '0' + elif(isPseudoPalindrome(S)): return '1' + return '2' + +T = int(sys.stdin.readline()) + +for _ in range(T): + S = sys.stdin.readline().strip() + sys.stdout.write(palindrome(S) + '\n') +``` + +### ์‹œ๊ฐ„์ดˆ๊ณผ 2.. + +``` +import sys + +def isPalindrome(S): + mid = int(len(S) / 2) + for i in range(mid): + if (S[i] != S[len(S)-1-i]): return False + return True + +def isPseudoPalindrome(S): + for i in range(len(S)): + if(isPalindrome(S[:i] + S[i+1:])): return True + return False + +def palindrome(S): + if(isPalindrome(S)): return '0' + elif(isPseudoPalindrome(S)): return '1' + return '2' + +T = int(sys.stdin.readline()) + +for _ in range(T): + S = sys.stdin.readline().strip() + + sys.stdout.write(palindrome(S) + '\n') +``` + +### ์„ฑ๊ณต + +``` +import sys + +def isPalindrome(S): + mid = int(len(S) / 2) + for i in range(mid): + if (S[i] != S[len(S)-1-i]): return False + return True + +def isPseudoPalindrome(S): + mid = int(len(S) / 2) + for i in range(mid): + if (S[i] != S[len(S)-1-i]): + FrontStr = S[:i] + S[i+1:] + BackStr = S[:len(S)-1-i] + S[len(S)-i:] + if(isPalindrome(FrontStr) or isPalindrome(BackStr)): return True + return False + return True + +def palindrome(S): + if(isPalindrome(S)): return '0' + elif(isPseudoPalindrome(S)): return '1' + return '2' + +if __name__ == '__main__': + T = int(sys.stdin.readline()) + + for _ in range(T): + S = sys.stdin.readline().strip() + sys.stdout.write(palindrome(S) + '\n') +``` + diff --git "a/src/Do-ho/greedy/boj_17609_\355\232\214\353\254\270/boj_17609.py" "b/src/Do-ho/greedy/boj_17609_\355\232\214\353\254\270/boj_17609.py" new file mode 100644 index 0000000..4583ebc --- /dev/null +++ "b/src/Do-ho/greedy/boj_17609_\355\232\214\353\254\270/boj_17609.py" @@ -0,0 +1,29 @@ +import sys + +def isPalindrome(S): + mid = int(len(S) / 2) + for i in range(mid): + if (S[i] != S[len(S)-1-i]): return False + return True + +def isPseudoPalindrome(S): + mid = int(len(S) / 2) + for i in range(mid): + if (S[i] != S[len(S)-1-i]): + FrontStr = S[:i] + S[i+1:] + BackStr = S[:len(S)-1-i] + S[len(S)-i:] + if(isPalindrome(FrontStr) or isPalindrome(BackStr)): return True + return False + return True + +def palindrome(S): + if(isPalindrome(S)): return '0' + elif(isPseudoPalindrome(S)): return '1' + return '2' + +if __name__ == '__main__': + T = int(sys.stdin.readline()) + + for _ in range(T): + S = sys.stdin.readline().strip() + sys.stdout.write(palindrome(S) + '\n') \ No newline at end of file diff --git "a/src/Do-ho/greedy/boj_1946_\354\213\240\354\236\205\354\202\254\354\233\220/boj_1946.py" "b/src/Do-ho/greedy/boj_1946_\354\213\240\354\236\205\354\202\254\354\233\220/boj_1946.py" new file mode 100644 index 0000000..2b9ec08 --- /dev/null +++ "b/src/Do-ho/greedy/boj_1946_\354\213\240\354\236\205\354\202\254\354\233\220/boj_1946.py" @@ -0,0 +1,18 @@ +import sys + +T = int(sys.stdin.readline()) + +for _ in range(T): + employees = [] + N = int(sys.stdin.readline()) + for _ in range(N): + employees.append(list(map(int, sys.stdin.readline().split()))) + employees.sort() + + testEmployee = employees[0] + count = 1 + for employee in employees: + if testEmployee[1] > employee[1]: + count += 1 + testEmployee = employee + print(count) \ No newline at end of file diff --git "a/src/Do-ho/implementation/boj_1254_\355\214\260\353\246\260\353\223\234\353\241\254\353\247\214\353\223\244\352\270\260/README.md" "b/src/Do-ho/implementation/boj_1254_\355\214\260\353\246\260\353\223\234\353\241\254\353\247\214\353\223\244\352\270\260/README.md" new file mode 100644 index 0000000..d560de4 --- /dev/null +++ "b/src/Do-ho/implementation/boj_1254_\355\214\260\353\246\260\353\223\234\353\241\254\353\247\214\353\223\244\352\270\260/README.md" @@ -0,0 +1,9 @@ +# ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ + +ํŒฐ๋ฆฐ๋“œ๋กฌ ๋งŒ๋“ค๊ธฐ + +๋’ค๋ถ€ํ„ฐ ์ตœ๋Œ€์˜ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ฐพ๊ณ  ๊ทธ ๋‚˜๋จธ์ง€ length๋ฅผ ๋”ํ•œ๋‹ค. + +=== + +๋’ค๋ถ€ํ„ฐ ์ตœ๋Œ€์˜ ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ์ฐพ๊ณ  ๊ทธ ๊ธธ์ด๋ฅผ 2๋ฐฐํ•œ ๊ฑฐ์—์„œ ๋บ€๋‹ค. \ No newline at end of file diff --git "a/src/Do-ho/implementation/boj_1254_\355\214\260\353\246\260\353\223\234\353\241\254\353\247\214\353\223\244\352\270\260/boj_1254.py" "b/src/Do-ho/implementation/boj_1254_\355\214\260\353\246\260\353\223\234\353\241\254\353\247\214\353\223\244\352\270\260/boj_1254.py" new file mode 100644 index 0000000..8a138d2 --- /dev/null +++ "b/src/Do-ho/implementation/boj_1254_\355\214\260\353\246\260\353\223\234\353\241\254\353\247\214\353\223\244\352\270\260/boj_1254.py" @@ -0,0 +1,14 @@ +import sys + +def palindrome(S): + return S == S[::-1] + +S = sys.stdin.readline().strip() +S_reverse = S[::-1] + +max_palindrome = 0 +for i in range(len(S_reverse)): + checkString = S_reverse[0:i+1] + if palindrome(checkString): max_palindrome = len(checkString) + +print(len(S)*2 - max_palindrome) \ No newline at end of file diff --git "a/src/Do-ho/implementation/boj_12731_\354\227\264\354\260\250\354\213\234\352\260\204\355\221\234small/README.md" "b/src/Do-ho/implementation/boj_12731_\354\227\264\354\260\250\354\213\234\352\260\204\355\221\234small/README.md" new file mode 100644 index 0000000..203fee3 --- /dev/null +++ "b/src/Do-ho/implementation/boj_12731_\354\227\264\354\260\250\354\213\234\352\260\204\355\221\234small/README.md" @@ -0,0 +1,17 @@ +# ์—ด์ฐจ ์‹œ๊ฐ„ํ‘œ(Small) + +test case + +``` +1 +0 +2 2 +10:30 11:00 +12:00 13:00 +11:00 12:00 +09:00 10:30 +``` +``` 0, 1 ``` + +A์™€ B๋ฅผ ์‹œ๊ฐ„ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์ œ์ผ ์•ž ๊ธฐ์ฐจ๋ฅผ ์ถœ๋ฐœ ์‹œ์ผœ์„œ +๊ณ„์†์ ์œผ๋กœ ๊ฒ€์‚ฌํ•ด๋‚˜๊ฐ \ No newline at end of file diff --git "a/src/Do-ho/implementation/boj_12731_\354\227\264\354\260\250\354\213\234\352\260\204\355\221\234small/boj_12731.py" "b/src/Do-ho/implementation/boj_12731_\354\227\264\354\260\250\354\213\234\352\260\204\355\221\234small/boj_12731.py" new file mode 100644 index 0000000..a2b2cc4 --- /dev/null +++ "b/src/Do-ho/implementation/boj_12731_\354\227\264\354\260\250\354\213\234\352\260\204\355\221\234small/boj_12731.py" @@ -0,0 +1,56 @@ +import sys +from datetime import datetime, timedelta + +def trainInput(n, result, alpha): + for _ in range(n): + [inputStartTime, inputEndTime] = list(sys.stdin.readline().strip().split()) + startTime = list(map(int, inputStartTime.split(':'))) + endTime = list(map(int, inputEndTime.split(':'))) + + start = datetime(2020, 11, 14, startTime[0], startTime[1]) + end = datetime(2020, 11, 14, endTime[0], endTime[1]) + + result.append([start, end, alpha, True]) + +def trainsInput(NA, NB): + result = [] + trainInput(NA, result, 'A') + trainInput(NB, result, 'B') + + result.sort() + return result + +def getStartTrains(L, T): + S = {"A": 0, "B": 0} + Ttime = timedelta(minutes=T) + + for i, trainTime in enumerate(L): + if not trainTime[3]: continue + trainTime[3] = False + S[trainTime[2]] += 1 + + checkTime = trainTime[1] + Ttime + checkStation = trainTime[2] + + for j in range(i+1, len(L)): + if L[j][3] and checkTime <= L[j][0] and checkStation != L[j][2]: + L[j][3] = False + checkTime = L[j][1] + Ttime + checkStation = L[j][2] + + return [S["A"], S["B"]] + +def case(caseID): + T = int(sys.stdin.readline()) + [NA, NB] = list(map(int, sys.stdin.readline().strip().split())) + L = trainsInput(NA, NB) + [SA, SB] = getStartTrains(L, T) + + sys.stdout.write("Case #" + str(caseID) +": " + str(SA) + " " + str(SB) + "\n") + + +# ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐœ์ˆ˜ N +N = int(sys.stdin.readline()) + +for i in range(1, N+1): + case(i) \ No newline at end of file diff --git "a/src/Do-ho/implementation/pgs_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/pgs_palindrome.js" "b/src/Do-ho/implementation/pgs_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/pgs_palindrome.js" new file mode 100644 index 0000000..ce7affc --- /dev/null +++ "b/src/Do-ho/implementation/pgs_\352\260\200\354\236\245\352\270\264\355\214\260\353\246\260\353\223\234\353\241\254/pgs_palindrome.js" @@ -0,0 +1,21 @@ +const getOddPalindromeLength = (s, idx) => { return loopPalindrome(s, idx-1, idx+1, 1); } +const getEvenPalindromeLength = (s, idx) => { + if(s[idx] != s[idx+1]) return 0; + return loopPalindrome(s, idx-1, idx+2, 2); +} + +const loopPalindrome = (s, left, right, palindromeCount) => { + while(left >= 0 && right < s.length) { + if(s[left--] !== s[right++]) break; + palindromeCount += 2 + } + return palindromeCount; +} + +const solution = s => { + let answer = 0; + for (let i=0; i { + let [people, order] = [0, 0]; + let prevText = null; + let wordSet = []; + const isNotPrevTextNull = () => prevText !== null; + const isNotMatchWord = (word) => prevText[prevText.length - 1] !== word[0]; + const isContainWordSet = (word) => wordSet.includes(word); + + for (let i=0; i { + for(let i=0; i { + let answer = 0; + let basket = new CraneStack(); + + moves.forEach((item) => { + const doll = pickDoll(board, item-1); + if(doll!==0) answer += basket.pushAndGetResult(doll); + }) + + return answer; +} \ No newline at end of file diff --git "a/src/Do-ho/implementation/pgs_\355\212\234\355\224\214/pgs_tuple.js" "b/src/Do-ho/implementation/pgs_\355\212\234\355\224\214/pgs_tuple.js" new file mode 100644 index 0000000..b2f5b43 --- /dev/null +++ "b/src/Do-ho/implementation/pgs_\355\212\234\355\224\214/pgs_tuple.js" @@ -0,0 +1,25 @@ +const removeBracket = s => { + const re = /[0-9]+(,[0-9]+)*/g; + return s.match(re); +} + +const compareFunction = (prev, curr) => prev.length - curr.length; + +const parseStr = s => { + const strWithOutBracket = removeBracket(s); + const parsed = strWithOutBracket.reduce((acc, cur) => { + acc.push(cur.split(',')); + return acc; + }, []) + return parsed.sort(compareFunction); +} + +const solution = s => { + const parsedArr = parseStr(s); + const answer = parsedArr.reduce((acc, cur) => { + const filterItem = cur.filter((item) => !acc.includes(item)); + acc.push(filterItem[0]); + return acc; + }, []).map(item => parseInt(item)) + return answer; +} \ No newline at end of file diff --git a/src/Do-ho/string/boj_1316/README.md b/src/Do-ho/string/boj_1316/README.md new file mode 100644 index 0000000..b54a3d6 --- /dev/null +++ b/src/Do-ho/string/boj_1316/README.md @@ -0,0 +1,4 @@ +# ๊ทธ๋ฃน ๋‹จ์–ด ์ฒด์ปค + +- ๋ฌธ์ œ๋ฅผ ์ž˜ ๋ณด๋‹ˆ๊นŒ ์ด๋ฏธ ๋‚˜์™”๋˜ ๋ฌธ์ž๊ฐ€ ๋‹ค์‹œ ๋‚˜์˜ค๋ฉด ์•ˆ๋จ +- ๊ทธ๋ž˜์„œ ๋งต์— ํ•ด๋‹น ํ‚ค์™€ ๊ฐ’์„ ๋„ฃ๊ณ  True/False๋กœ ์ฒดํฌ \ No newline at end of file diff --git a/src/Do-ho/string/boj_1316/boj_1316.py b/src/Do-ho/string/boj_1316/boj_1316.py new file mode 100644 index 0000000..104305f --- /dev/null +++ b/src/Do-ho/string/boj_1316/boj_1316.py @@ -0,0 +1,26 @@ +import sys + +N = int(sys.stdin.readline()) + +def checkString(string): + check_arr = {} + prev_char = string[0] + + for ch in string: + try: + if not check_arr[ch]: return False + except: + check_arr[ch] = True + check_arr[prev_char] = False + check_arr[ch] = True + prev_char = ch + + return True + +result = 0 + +for i in range(N): + string = sys.stdin.readline().replace('\n', '') + if checkString(string): result += 1 + +print(result) \ No newline at end of file diff --git "a/src/Do-ho/string/pgs_\353\254\270\354\236\220\354\227\264\354\225\225\354\266\225/README.md" "b/src/Do-ho/string/pgs_\353\254\270\354\236\220\354\227\264\354\225\225\354\266\225/README.md" new file mode 100644 index 0000000..47a191e --- /dev/null +++ "b/src/Do-ho/string/pgs_\353\254\270\354\236\220\354\227\264\354\225\225\354\266\225/README.md" @@ -0,0 +1,65 @@ +# ๋ฌธ์ž์—ด ์••์ถ• + +1. ์•„์ด๋””์–ด + +```python +for 1๊ธ€์ž๋ถ€ํ„ฐ ์ „์ฒด ๊ธธ์ด์˜ ๋ฐ˜๊นŒ์ง€ ๋Œ๋ฆผ: + prev_str = ์ฒซ ๊ธ€์ž ์„ ์–ธ + count = 1 + lastcount = 0 + + for ๊ธ€์ž ๊ธธ์ด ๋‹จ์œ„๋กœ ์›€์ง์ž„: + target_str = ํƒ€๊ฒŸ ๊ธ€์ž ์„ ์–ธ + + if ์•ž ๋’ค ๊ธ€์ž๊ฐ€ ๊ฐ™๋‹ค๋ฉด: + count += 1 + if ๋งˆ์ง€๋ง‰ ๊ฒ€์‚ฌ๋ผ๋ฉด: + lastcount = len(str(count)) + ๊ธ€์ž ๊ธธ์ด + elif count๊ฐ€ 1์ด๋ผ๋ฉด: + lastcount = ๊ธ€์ž ๊ธธ์ด + else: + # count๊ฐ€ 2์ด์ƒ์ธ๋ฐ ๋งˆ์ง€๋ง‰์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ด๋ฏ€๋กœ + lastcount = len(str(count)) + ๊ธ€์ž ๊ธธ์ด + +``` + + + +- 1์ฐจ ์‹œ๋„ ์‹คํŒจ... + +``` +def solution(s): + answer = 1000 + length = int(len(s) / 2) + 1 + + for i in range(1, length): + prev_str = s[0:i] + count = 1 + lastcount = 0 + prev_j = 0 + for j in range(i, len(s)-i+1 ,i): + target_str = s[j:(j+i)] + print(j) + print(target_str) + if prev_str == target_str: + count+= 1 + if count!=1 and j+i+i>=len(s)-i: + lastcount += len(str(count)) + i + + elif count==1: lastcount += i + else: + lastcount += len(str(count)) + i + count = 1 + prev_str = target_str + prev_j = j + # print(lastcount) + # print(prev_j) + if(prev_j != len(s)-i): + print('ggggggg') + lastcount += len(s)-prev_j + # print(prev_j, lastcount) + if lastcount < answer: answer = lastcount + + return answer +``` + diff --git "a/src/Do-ho/string/pgs_\353\254\270\354\236\220\354\227\264\354\225\225\354\266\225/source.py" "b/src/Do-ho/string/pgs_\353\254\270\354\236\220\354\227\264\354\225\225\354\266\225/source.py" new file mode 100644 index 0000000..62622a9 --- /dev/null +++ "b/src/Do-ho/string/pgs_\353\254\270\354\236\220\354\227\264\354\225\225\354\266\225/source.py" @@ -0,0 +1,36 @@ +def solution(s): + answer = 1000 + length = int(len(s) / 2) + 1 + + for i in range(1, length): + arr = [] + for j in range(0, len(s)-i+1 ,i): + arr.append(s[j:(j+i)]) + + # ์•„์ดํ…œ ์ค‘๋ณต ๊ฒ€์‚ฌ + prev_item = arr[0] + count = 0 + addcount = 0 + for idx, item in enumerate(arr): + if prev_item == item: + print(prev_item, item) + count += 1 + if(idx==len(arr)-1): + addcount += len(str(count)) + i + elif count==1: + addcount += i + print(prev_item, item) + else: + print(prev_item, item) + addcount += len(str(count)) + i + count = 1 + prev_item = item + + print(i, addcount) + # ์ŠคํŠธ๋ง ๋๊นŒ์ง€ ๊ฒ€์‚ฌ ์•ˆํ–ˆ์„ ๋•Œ + if(len(arr)*i!=len(s)): + addcount += len(s) - (len(arr)*i) + print(i, addcount) + + if addcount < answer: answer = addcount + return answer \ No newline at end of file diff --git a/src/Do-ho/week1.md b/src/Do-ho/week1.md new file mode 100644 index 0000000..a409323 --- /dev/null +++ b/src/Do-ho/week1.md @@ -0,0 +1,57 @@ +# :fire: Week1 + +## :question: ๋ฐฑ์ค€ 1158๋ฒˆ ๋ฌธ์ œ (์š”์„ธํ‘ธ์Šค ์ˆœ์—ด) +- ์ฒ˜์Œ ํ’€์—ˆ๋˜ ๋ฐฉ์‹ + ```python + a, b = map(int, input().split()) + + linked_list = [] + queue = [] + count = 1 + idx = 0 + + for i in range(a): + linked_list.append(str(i+1)) + + while(len(linked_list)!=0): + if(count==b): + queue.append(linked_list[idx]) + linked_list.remove(linked_list[idx]) + count = 1 + else: + count += 1 + idx = (idx + 1)%len(linked_list) + + print('<'+', '.join(queue)+'>') + ``` + + - ์‹œ๊ฐ„์ดˆ๊ณผ.... + - ๋”ฐ๋ผ์„œ ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฐ”๋กœ ์˜ฌ๋ ค์„œ ๊ฒ€์‚ฌํ•ด๋„ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ + +- ๋‘ ๋ฒˆ์งธ ํ’€์—ˆ๋˜ ๋ฐฉ์‹ + + ```python + N, K = map(int, input().split()) + + numArr = [] + queue = [] + idx = 0 + + for i in range(N): + numArr.append(str(i+1)) + + while(len(numArr)!=0): + idx = (idx + (K-1)) % len(numArr) + popData = numArr.pop(idx) + queue.append(popData) + + print('<'+', '.join(queue)+'>') + ``` + + + +## :question: ๋ฐฑ์ค€ 1406๋ฒˆ ๋ฌธ์ œ (์—๋””ํ„ฐ) + +- ์ปค๋งจ๋“œ์— ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋ฅผ ๋‚˜๋ˆ  ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. +- ๋ณต์žก๋„์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€ ์•Š์„๊นŒ... +- ์•„๋‹ˆ๋ฉด hidden case๊ฐ€ ์žˆ์„๊นŒ...? \ No newline at end of file diff --git a/src/do02reen24/.gitignore b/src/do02reen24/.gitignore new file mode 100644 index 0000000..57d45e2 --- /dev/null +++ b/src/do02reen24/.gitignore @@ -0,0 +1,2 @@ +์ฝ”๋”ฉํ…Œ์ŠคํŠธ +.vscode \ No newline at end of file diff --git a/src/do02reen24/BFS/baekjoon_1697.cpp b/src/do02reen24/BFS/baekjoon_1697.cpp new file mode 100644 index 0000000..6b0c9c1 --- /dev/null +++ b/src/do02reen24/BFS/baekjoon_1697.cpp @@ -0,0 +1,44 @@ +#include +#include +using namespace std; +const int MAX_RANGE = 2000000; +bool visit[MAX_RANGE + 1]; +int cost[MAX_RANGE + 1]; +int main() { + int n, k; + cin >> n >> k; + queue q; + cost[n] = 0; + visit[n] = true; + q.push(n); + while (!q.empty()) { + int index = q.front(); + q.pop(); + if (index - 1 >= 0) { + if (visit[index - 1] == false) { + q.push(index - 1); + visit[index - 1] = true; + cost[index - 1] = cost[index] + 1; + } + } + if (index + 1 < MAX_RANGE) { + if (visit[index + 1] == false) { + q.push(index + 1); + visit[index + 1] = true; + cost[index + 1] = cost[index] + 1; + } + } + if (index * 2 < MAX_RANGE) { + if (visit[index * 2] == false) { + q.push(index * 2); + visit[index * 2] = true; + cost[index * 2] = cost[index] + 1; + } + } + if (visit[k] == true) { + cout << cost[k] << '\n'; + break; + } + } + return 0; +} \ No newline at end of file diff --git a/src/do02reen24/BFS/baekjoon_2178.py b/src/do02reen24/BFS/baekjoon_2178.py new file mode 100644 index 0000000..31297e0 --- /dev/null +++ b/src/do02reen24/BFS/baekjoon_2178.py @@ -0,0 +1,28 @@ +import sys + +dx = [0, 0, -1, 1] +dy = [1, -1, 0, 0] + +n, m = map(int, sys.stdin.readline().split()) +board = [] +for _ in range(n): + board.append(sys.stdin.readline().rstrip()) + +visited = [[-1 for _ in range(m)] for _ in range(n)] +visited[0][0] = 1 +visit = [(0,0)] +new_visit = [] +while visit: + x, y = visit.pop() + for i in range(4): + mx = x + dx[i] + my = y + dy[i] + if mx >= 0 and mx < n and my >=0 and my < m: + if visited[mx][my] != -1 or board[mx][my] == "0": continue + visited[mx][my] = visited[x][y] + 1 + new_visit.append((mx, my)) + if not visit: + visit = new_visit + new_visit = [] + +print(visited[n-1][m-1]) \ No newline at end of file diff --git a/src/do02reen24/BFS/baekjoon_2606.py b/src/do02reen24/BFS/baekjoon_2606.py new file mode 100644 index 0000000..fd98d29 --- /dev/null +++ b/src/do02reen24/BFS/baekjoon_2606.py @@ -0,0 +1,29 @@ +import sys + +if __name__ == '__main__': + ans = 0 + n = int(sys.stdin.readline()) + t = int(sys.stdin.readline()) + network = {} + for _ in range(t): + n1, n2 = map(int, sys.stdin.readline().split()) + if network.get(n1) == None: + network[n1] = [] + network[n1].append(n2) + if network.get(n2) == None: + network[n2] = [] + network[n2].append(n1) + visit = [False] * (n + 1) + queue = [] + queue.append(1) + visit[1] = True + while queue: + index = queue.pop() + check = network[index] + while check: + com = check.pop() + if visit[com] == False: + queue.append(com) + visit[com] = True + ans += 1 + print(ans) \ No newline at end of file diff --git a/src/do02reen24/BFS/baekjoon_2644.py b/src/do02reen24/BFS/baekjoon_2644.py new file mode 100644 index 0000000..6fb6303 --- /dev/null +++ b/src/do02reen24/BFS/baekjoon_2644.py @@ -0,0 +1,26 @@ +import sys + +n = int(sys.stdin.readline()) +p1, p2 = map(lambda data: int(data)-1, sys.stdin.readline().split()) +relation = [[] for _ in range(n)] +m = int(sys.stdin.readline()) +for _ in range(m): + parent, children = map(lambda data: int(data)-1, sys.stdin.readline().split()) + relation[parent].append(children) + relation[children].append(parent) +cost = [-1 for _ in range(n)] +cost[p1] = 0 +count = 1 +queue = [p1] +new_queue = [] +while queue: + person = queue.pop() + for p in relation[person]: + if cost[p] != -1: continue + cost[p] = count + new_queue.append(p) + if not queue: + queue = new_queue + new_queue = [] + count = count + 1 +print(cost[p2]) \ No newline at end of file diff --git a/src/do02reen24/BFS/baekjoon_7569.py b/src/do02reen24/BFS/baekjoon_7569.py new file mode 100644 index 0000000..96e8330 --- /dev/null +++ b/src/do02reen24/BFS/baekjoon_7569.py @@ -0,0 +1,48 @@ +import sys + +dh = [-1, 1, 0, 0, 0, 0] +dr = [0, 0, -1, 1, 0, 0] +dc = [0, 0, 0, 0, -1, 1] + +def getDays(): + n, m, k = map(int, sys.stdin.readline().split()) + ans = 0 + boxes = [] + remain = 0 + tomatoes = [] + for height in range(0, k): + box = [] + for row in range(0, m): + t = list(map(int, sys.stdin.readline().split())) + box.append(t) + for col in range(0, len(t)): + if t[col] == 0: + remain += 1 + elif t[col] == 1: + tomatoes.append((height, row, col)) + boxes.append(box) + if remain == 0: + return 0 + if not tomatoes: + return -1 + newTomatoes = [] + while tomatoes: + h, r, c = tomatoes.pop() + for i in range(0, 6): + mh = h + dh[i] + mr = r + dr[i] + mc = c + dc[i] + if mh >=0 and mh < k and mr >=0 and mr < m and mc >=0 and mc < n: + if boxes[mh][mr][mc] == 0: + boxes[mh][mr][mc] = 1 + remain -= 1 + newTomatoes.append((mh, mr, mc)) + if not tomatoes and newTomatoes: + tomatoes = newTomatoes + newTomatoes = [] + ans += 1 + if remain > 0: + return -1 + return ans +if __name__ == '__main__': + print(getDays()) \ No newline at end of file diff --git a/src/do02reen24/BFS/programmers_43162.js b/src/do02reen24/BFS/programmers_43162.js new file mode 100644 index 0000000..93110e2 --- /dev/null +++ b/src/do02reen24/BFS/programmers_43162.js @@ -0,0 +1,23 @@ +const solution = (n, computers) => { + let answer = 0; + const network = Array.from({ length: n }, () => 0); + + for (let i = 0; i < n; i += 1) { + if (network[i] !== 0) continue; + answer += 1; + network[i] = answer; + + const queue = [i]; + while (queue.length > 0) { + const visit = queue.pop(); + computers[visit].forEach((computer, index) => { + if (computer && network[index] === 0) { + queue.push(index); + network[index] = answer; + } + }); + } + } + + return answer; +}; diff --git a/src/do02reen24/Review/unsolved.md b/src/do02reen24/Review/unsolved.md new file mode 100644 index 0000000..2e2c741 --- /dev/null +++ b/src/do02reen24/Review/unsolved.md @@ -0,0 +1,12 @@ +# ๐Ÿ“š unsolved problem + +## ๐Ÿ“˜ baekjoon + +- ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (ํ”Œ๋ž˜ํ‹ฐ๋„˜5) [:link:](https://www.acmicpc.net/problem/2957) +- ์Šคํƒ€ํŠธ ํƒ์‹œ (๊ณจ๋“œ4) [:link:](https://www.acmicpc.net/problem/19238) +- ๋‹ฌ์ด ์ฐจ์˜ค๋ฅธ๋‹ค, ๊ฐ€์ž (๊ณจ๋“œ1) [:link:](https://www.acmicpc.net/problem/1194) +- ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ (๊ณจ๋“œ5) [:link:](https://www.acmicpc.net/problem/12865) + +## ๐Ÿ“— programmers + +- 3์ฐจ ์ž๋™์™„์„ฑ [:link:](https://programmers.co.kr/learn/courses/30/lessons/17685) diff --git a/src/do02reen24/Review/week1.md b/src/do02reen24/Review/week1.md new file mode 100644 index 0000000..bf456d5 --- /dev/null +++ b/src/do02reen24/Review/week1.md @@ -0,0 +1,130 @@ +# :fire: week1 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1158 + +ํŒŒ์ด์ฌ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ (๊ฑฐ์˜ ์ฒ˜์Œ)์ค€๋น„ํ•˜๋ฉด์„œ ์ž…๋ ฅ์„ ๋ฐ›๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์ฐพ์•„๋ณด์•˜๋‹ค. `input()` ์ด๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๊ธด ํ•˜์ง€๋งŒ `sys.stdin.readline()` ์„ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1406 + +๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ โ†’ ํ•ด๊ฒฐ + +#### ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋˜ ์ฝ”๋“œ + +```python +import sys + +if __name__ == '__main__': + string = list(sys.stdin.readline().rstrip()) + cursor = len(string) + + n = int(sys.stdin.readline().rstrip()) + for i in range(0, n): + command = list(sys.stdin.readline().split()) + if command[0] == 'L' and cursor != 0: + cursor -= 1 + elif command[0] == 'D' and cursor != len(string): + cursor += 1 + elif command[0] == 'B' and cursor != 0: + string.pop(cursor - 1) + elif command[0] == 'P': + string.insert(cursor, command[1]) + cursor += 1 + + print(''.join(string)) +``` + +์ฒ˜์Œ์—” ๋Œ์•„๋งŒ ๊ฐ€๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ํšจ์œจ์„ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ์•„๋ž˜ ๋งํฌ์—์„œ ํžŒํŠธ๋ฅผ ์–ป์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +[https://www.acmicpc.net/board/view/54572๏ปฟ](https://www.acmicpc.net/board/view/54572) + +`linked list`๋ฅผ ๋งŒ๋“ค์–ด ํ•ด๊ฒฐํ•˜๋ คํ–‡์œผ๋‚˜ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ๊ธธ์–ด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„, `stack `2๊ฐœ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2346 + +1158๋ฒˆ๊ณผ ๋น„์Šทํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2957 + +๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ โ†’ ์‹œ๊ฐ„์ดˆ๊ณผ โ†’ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ + +### ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ + +```python +import sys + +class Node(object): + def __init__(self, n): + self.n = n + self.left = None + self.right = None + +class BinarySearchTree(object): + def __init__(self): + self.root = None + self.count = 0 + + def insert(self, n, node): + if self.root == None: + self.root = Node(n) + else: + self.count += 1 + if node.n < n: + if node.left == None: + newNode = Node(n) + node.left = newNode + else: + self.insert(n, node.left) + else: + if node.right == None: + newNode = Node(n) + node.right = newNode + else: + self.insert(n, node.right) + return self.root, self.count + +if __name__ == '__main__': + N = int(sys.stdin.readline().rstrip()) + bst = BinarySearchTree() + node = None + + for i in range(0, N): + n = int(sys.stdin.readline().rstrip()) + node, count = bst.insert(n, node) + print(count) +``` + +ํŒŒ์ด์ฌ์€ ์žฌ๊ท€ ํ˜ธ์ถœ์— ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์žฌ๊ท€ ํ˜ธ์ถœ์ด ๋งŽ์ด ๋œ๋‹ค๋ฉด ์ด๋ฅผ ๋Š˜๋ ค์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. + +```python +import sys +sys.setrecursionlimit(300000) +``` + +์œ„ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +### ์‹œ๊ฐ„ ์ดˆ๊ณผ + +๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. `python`์˜ ์ปดํŒŒ์ผ์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค. `pypy3`๋ฅผ ์“ฐ๋ฉด ๋น ๋ฅด๊ฒŒ ์ปดํŒŒ์ผ ๋œ๋‹ค๊ณ  ํ•˜์—ฌ `pypy3`๋กœ ๋‹ค์‹œ ์ œ์ถœํ•ด๋ดค๋‹ค. + +### ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ + +`pypy3`๋กœ ์ œ์ถœํ•˜๋‹ˆ๊นŒ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ณ ์น˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋ฌธ์ œ์˜ ์„ค๋ช…์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด `O(n^2)`์ด๋ผ๊ณ  ํ•œ๋‹ค. + + + +## :pencil2: ๊ณ ์ฐฐ + +### ์ž˜ํ–ˆ๋˜ ๊ฒƒ, ์ข‹์•˜๋˜ ๊ฒƒ, ๋„์ „ ํ•ด๋ณผ ์ , ๊ณ„์†ํ•  ๊ฒƒ + +* ๋ธ”๋กœ๊ทธ์— ์ฐพ์•„๋ดค๋˜ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ž˜ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค ๊ธฐ์–ตํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ฆฌํ•ด๋†“๊ณ  ์ฐพ์•„๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์•ž์œผ๋กœ๋„ ๊ณ„์† ์“ธ ๊ณ„ํš์ด๋‹ค. +* ํ•˜๋ฃจ์— ๋ฌธ์ œ๋ฅผ ๋ชฐ์•„์„œ ํ’€์ง€ ์•Š๊ณ  ๋‚˜๋ˆ ์„œ ํ’€์—ˆ๋‹ค. (๋ฌผ๋ก  ํ•ด๊ฒฐ์„ ๋ชปํ•œ ๊ฒƒ๋„ ์žˆ์ง€๋งŒ...) + +### ์ž˜๋ชปํ–ˆ๋˜ ๊ฒƒ, ์•„์‰ฌ์šด ๊ฒƒ, ๋ถ€์กฑํ•œ ๊ฒƒ, ๊ฐœ์„ ๋ฐฉํ–ฅ + +* ์–ธ์–ด์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๊ผผ๊ผผํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ด์ „๊นŒ์ง€๋Š” c++์„ ์‚ฌ์šฉํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€์—ˆ์—ˆ๋Š”๋ฐ python์—์„œ๋Š” ๋™์ž‘์›๋ฆฌ๊ฐ€ ๋‹ฌ๋ผ ๋…ผ๋ฆฌ๊ฐ€ ๋น„์Šทํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. +* python์œผ๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„์ด ๋‚ฏ์„ค์–ด ๋ณด๊ณ  ๋”ฐ๋ผ์น˜๊ณ  ์žˆ๋Š”๋ฐ ์™ธ์šฐ๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์„ ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. +* ์ „ ๋‚  ์นœ๊ตฌ๋“ค๊ณผ ์•ฝ์†์—์„œ ๋„ˆ๋ฌด ์‹ ๋‚˜๊ฒŒ ๋…ธ๋Š” ๋ฐ”๋žŒ์— ๋Šฆ๊ฒŒ ์ผ์–ด๋‚˜ ์ฐธ์—ฌ๋ฅผ ๋ชปํ–ˆ๋‹ค. ์ฒซ ๋‚ ์˜ ์‹ค์ˆ˜๋ฅผ ๋งŒํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋ผ๋„ ์•ž์œผ๋กœ๋Š” ๋”์šฑ ์—ด์‹ฌํžˆ ์ฐธ์—ฌํ•ด์•ผ๊ฒ ๋‹ค. + +### ๊ธฐํƒ€ + +* python์ด ๋…ผ๋ฆฌ๋ฅผ ๋ฐ”๋กœ๋ฐ”๋กœ ์ƒ๊ฐํ•˜๊ธฐ ์‰ฌ์›Œ์„œ ์ข‹๊ธด ํ•˜๋‚˜ ์•„์ง์€ c++์ด ๋” ์ต์ˆ™ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. python์œผ๋กœ ์ข€ ๋” ์ง„ํ–‰ํ•ด๋ณด๊ณ  ์–ด๋–ค ์–ธ์–ด๋กœ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ๊ฒ ๋‹ค. \ No newline at end of file diff --git a/src/do02reen24/Review/week10.md b/src/do02reen24/Review/week10.md new file mode 100644 index 0000000..89f6d76 --- /dev/null +++ b/src/do02reen24/Review/week10.md @@ -0,0 +1,16 @@ +# :fire: week10 + +์ฃผ์ œ : Dynamic programming + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1010 + +- ๋‹ค๋ฆฌ๊ฐ€ ๊ฒน์น  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ ๋‹ค๋ฆฌ์—์„œ k ๊ฐœ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ฐจ๋ก€๋กœ ์ด์–ด์ฃผ๋ฉด ๋œ๋‹ค. python์˜ combination ์„ ์ง์ ‘ ๋ถˆ๋Ÿฌ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ์ง€๋งŒ, factorial์„ ์“ฐ๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅผ ๊ฒƒ ๊ฐ™์•„ factorial๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2579 + +- ๋งˆ์ง€๋ง‰ ์นธ์— ๋„์ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. i-2, i-1, i๋ฒˆ์งธ ์นธ์— ๋Œ€ํ•ด oxo, xoo ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค. +- ๊ฐ ๊ฒฝ์šฐ ์ค‘ ๋” ํฐ ๊ฐ’์„ ์„ ํƒํ•˜๋ฉฐ ๋‹ค์Œ์นธ์œผ๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1149 + +- ๋ฌธ์ œ๊ฐ€ dynamic-programming์ธ ๊ฒƒ์„ ๊ณ ๋ คํ•˜์—ฌ ๊ฐ r, g, b์— ๋Œ€ํ•ด ์ตœ์†Œ๊ฐ’์„ ๋ˆ„์ ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. diff --git a/src/do02reen24/Review/week11.md b/src/do02reen24/Review/week11.md new file mode 100644 index 0000000..67a39b8 --- /dev/null +++ b/src/do02reen24/Review/week11.md @@ -0,0 +1,20 @@ +# :fire: week11 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 12731 + +์ฒซ ์ œ์ถœ์—์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค. + +์•Œ๊ณ ๋ฆฌ์ฆ˜ ์Šคํ„ฐ๋””์›๋‹˜์˜ ๋„์›€์œผ๋กœ ๋ฐฑ์ค€์—์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ์‹œ ์–ด๋””์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋Š”์ง€ ์•Œ๋ ค์ค€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. + +![image](https://user-images.githubusercontent.com/50297117/99143310-c57ea900-269f-11eb-82f4-8eee2a33289e.png) + +is๋กœ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•ด๋„ ๋˜๋Š”์ค„ ์•Œ์•˜๋Š”๋ฐ ์•ˆ๋จ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  `==` ์œผ๋กœ ๊ณ ์ณ ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1932 + +- DB๋ฅผ ์ ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1254 + +- ์ฒ˜์Œ 11์ฃผ์ฐจ ๋•Œ๋Š” ๊ฐ ๊ฒฝ์šฐ๋ณ„๋กœ ๊ณ ๋ คํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์งœ๋‹ค๊ฐ€ ๊ผฌ์—ฌ์„œ ํ’€์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค. 12์ฃผ์ฐจ์˜ ํšŒ๋ฌธ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ํŒฐ๋ฆฐ๋“œ๋กฌ ๋ฌธ์ œ์— ๋‹ค์‹œ ๋„์ „ํ•˜์˜€๋‹ค. +- ํšŒ๋ฌธ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ์ฒ˜๋Ÿผ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ์ฒดํฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด ์ •๋‹ต์˜ ๊ธธ์ด๋ฅผ ๋Š˜๋ ค์ฃผ๋ฉฐ ๋‹ค์‹œ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. diff --git a/src/do02reen24/Review/week12.md b/src/do02reen24/Review/week12.md new file mode 100644 index 0000000..32a6e44 --- /dev/null +++ b/src/do02reen24/Review/week12.md @@ -0,0 +1,17 @@ +# :fire: week12 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 11399 + +- ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 17609 + +1. ์šฐ์„  ํŽ ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - ๋งž๋‹ค๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - ์•„๋‹ˆ๋ผ๋ฉด ํŽ ๋ฆฐ๋“œ๋กฌ์„ ๊นจ์ง€๊ฒŒ ๋งŒ๋“  index๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. +2. ์™ผ์ชฝ ๋‹จ์–ด(index)๋ฅผ ํ•˜๋‚˜ ์‚ญ์ œํ•˜์—ฌ ํŽ ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - ๋งž๋‹ค๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. +3. ์˜ค๋ฅธ์ชฝ ๋‹จ์–ด(length-index)๋ฅผ ํ•˜๋‚˜ ์‚ญ์ œํ•˜์—ฌ ํŽ ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. + - ๋งž๋‹ค๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. + - ์•„๋‹ˆ๋ผ๋ฉด 2๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. diff --git a/src/do02reen24/Review/week13.md b/src/do02reen24/Review/week13.md new file mode 100644 index 0000000..d9f5559 --- /dev/null +++ b/src/do02reen24/Review/week13.md @@ -0,0 +1,76 @@ +# :fire: week13 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2011 + +#### ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค (35%) + +```python +import sys + +def decodeNum(): + word = sys.stdin.readline().rstrip() + length = len(word) + + sol = [1] * (length + 1) + for i in range(1, length): + prev = int(word[i-1]+word[i]) + now = int(word[i]) + if prev == 10 or prev == 20: + sol[i+1] = sol[i-1] + elif 11 <= prev and prev <= 26: + sol[i+1] = (sol[i] % 1000000) + (sol[i-1] % 1000000) + elif 1 <= now and now <= 9: + sol[i+1] = sol[i] + else: return 0 + return sol[length] % 1000000 + +print(int(decodeNum())) +``` + +- ์ˆซ์ž๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์™ธ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  1000000์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•จ + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2178 + +- ์ดˆ๊ธฐ์— `visited = [[-1] * m] * n` ์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™”๋ฅผ ํ–ˆ๋”๋‹ˆ 2์ฐจ์› ๋ฐฐ์—ด์ด ๊ฐ™์€ ๊ฐ’๋“ค์„ ์ฐธ์กฐํ•˜์—ฌ ๋™์‹œ์— ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. `visited = [[-1 for _ in range(m)] for _ in range(n)]`์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +#### ๋Ÿฐํƒ€์ž„์—๋Ÿฌ(72%) + +```python +import sys + +dx = [0, 0, -1, 1] +dy = [1, -1, 0, 0] + +def bfs(visit): + new_visit = [] + while visit: + x, y = visit.pop() + for i in range(4): + mx = x + dx[i] + my = y + dy[i] + if mx >= 0 and mx < n and my >=0 and my < m: + if visited[mx][my] != -1 or board[mx][my] == "0": continue + visited[mx][my] = visited[x][y] + 1 + new_visit.append((mx, my)) + if len(new_visit) > 0: bfs(new_visit) + +n, m = map(int, sys.stdin.readline().split()) +board = [] +for _ in range(n): + board.append(sys.stdin.readline().rstrip()) +visited = [[-1 for _ in range(m)] for _ in range(n)] +visited[0][0] = 1 +bfs([(0,0)]) +print(visited[n-1][m-1]) +``` + +- ํŒŒ์ด์ฌ์€ ์žฌ๊ท€ํ˜ธ์ถœ ๊นŠ์ด์— ์ œํ•œ์ด ์žˆ๋Š”๋ฐ ์ด๋ฅผ ํ’€์–ด์ฃผ์ง€ ์•Š์•„ ์ƒ๊ธด ๋ฌธ์ œ ๊ฐ™์•˜๋‹ค. +- ์ข€ ๋” ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์žฌ๊ท€ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2644 + +- ์ƒํ•˜์ขŒ์šฐ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” bfs ๋ฌธ์ œ์™€ ๋‹ค๋ฅด๊ฒŒ ์„œ๋กœ์˜ ๊ด€๊ณ„๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜๋„๋ก ํ–ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2502 + +- fibonacci ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. ์žฌ๊ท€๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•„ ์ด์ „์˜ ๊ฐ’์„ ์žฌํ™œ์šฉํ•˜๋„๋ก ํ•˜์˜€๋‹ค. diff --git a/src/do02reen24/Review/week14.md b/src/do02reen24/Review/week14.md new file mode 100644 index 0000000..2c7d078 --- /dev/null +++ b/src/do02reen24/Review/week14.md @@ -0,0 +1,119 @@ +# :fire: week14 + +- ์ด๋ฒˆ์ฃผ๋Š” ๋งˆ์ด๋ฆฌ์–ผํŠธ๋ฆฝ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„๋ฅผ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ `javascript`๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ๋กœ ํ•˜์˜€๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŠœํ”Œ(64065) + +- python์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ javascript๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋‹ˆ ํ—ท๊ฐˆ๋ ธ๋‹ค. +- ๋ณ€์ˆ˜๋ช…๊ณผ ํ•จ์ˆ˜ ๋ถ„๋ฆฌ๋ฅผ ์‹ ๊ฒฝ์จ์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„(64061) + +#### ์ •ํ™•์„ฑ 81.8 + +- ํ…Œ์ŠคํŠธ 1๋ฒˆ, 2๋ฒˆ ์‹คํŒจ + +```js +const getTopDollIndex = (board, index) => { + let topIndex = -1; + for (const line of board) { + topIndex = topIndex + 1; + if (line[index] !== 0) break; + } + return topIndex; +}; + +const solution = (board, moves) => { + let answer = 0; + const basket = []; + for (const move of moves) { + const dollX = move - 1; + const dollY = getTopDollIndex(board, dollX); + const doll = board[dollY][dollX]; + board[dollY][dollX] = 0; + + const top = basket.pop(); + if (top === doll) { + answer = answer + 2; + } else { + basket.push(top); + basket.push(doll); + } + } + return answer; +}; +``` + +- ํ•ด๋‹น ์—ด์— ๋‚จ์€ ์ธํ˜•์ด ์—†์„ ๊ฒฝ์šฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ๊ธฐ์กด์˜ ์ฝ”๋“œ๋Š” 0์„ ๋„ฃ์–ด์ฃผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ(12904) + +#### ์ •ํ™•์„ฑ: 62.7, ํšจ์œจ์„ฑ: 30.7 + +- ํ…Œ์ŠคํŠธ 6๋ฒˆ 12๋ฒˆ ์‹คํŒจ + +```js +const isSameWord = (word, pre, next) => { + if (pre < 0 || next >= word.length) { + return false; + } + if (word[pre] !== word[next]) { + return false; + } + return true; +}; + +const oddPalindrome = (word, start) => { + let index = 1; + while (true) { + const pre = start - index; + const next = start + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + index = index - 1; + break; + } + return index * 2 + 1; +}; + +const evenPalindrome = (word, start) => { + let index = 0; + while (true) { + const pre = start - index; + const next = start + 1 + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + break; + } + return index * 2; +}; + +const isPalindrome = (word, start) => { + let length = oddPalindrome(word, start); + if (length === 1) { + const result = evenPalindrome(word, start); + if (result > length) { + length = result; + } + } + return length; +}; + +const solution = (s) => { + let maxLength = 0; + for (let index = 0; index < s.length; index++) { + const result = isPalindrome(s, index); + if (maxLength < result) { + maxLength = result; + } + } + + return maxLength; +}; +``` + +- ์ฒ˜์Œ ์ฝ”๋“œ์—์„œ๋Š” ํ™€์ˆ˜ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ง์ˆ˜ ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š์•˜์—ˆ๋Š”๋ฐ, ์ง์ˆ˜ ๊ฒ€์‚ฌ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋” ํฐ ๊ฒฝ์šฐ๋„ ์กด์žฌํ•จ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ๊ณ„์‚ฐํ•ด์ฃผ๊ณ  ๋” ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋„๋ก ๋ณ€๊ฒฝํ•˜์˜€๋‹ค. diff --git a/src/do02reen24/Review/week15.md b/src/do02reen24/Review/week15.md new file mode 100644 index 0000000..af356d6 --- /dev/null +++ b/src/do02reen24/Review/week15.md @@ -0,0 +1,16 @@ +# :fire: week15 + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์œ„์žฅ(42578) + +- ์กฐํ•ฉ์˜ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. +- ํ•ด๋‹น ์˜ท์„ ์•„์˜ˆ ๊ณ ๋ฅด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ์•„์ดํ…œ ๊ธธ์ด์— + 1 ์„ ํ•ด์ฃผ์—ˆ๋‹ค. +- ๋ชจ๋“  ์˜ท์„ ์•ˆ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ•ด์•ผํ•˜๋ฏ€๋กœ ์ •๋‹ต์—์„œ - 1 ์„ ํ•ด์ฃผ์—ˆ๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์˜์–ด ๋๋ง์ž‡๊ธฐ(12981) + +- ๊ฐ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋„คํŠธ์›Œํฌ(43162) + +- BFS์˜ ๊ฐœ๋…์„ ํ™œ์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค. +- ๋ฐฑ์ค€ 2644๋ฒˆ ๋ฌธ์ œ์™€ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™๋‹ค. diff --git a/src/do02reen24/Review/week2.md b/src/do02reen24/Review/week2.md new file mode 100644 index 0000000..7d608d5 --- /dev/null +++ b/src/do02reen24/Review/week2.md @@ -0,0 +1,120 @@ +# :fire: week2 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 11286 +#### ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. + +```python +import sys + +class Num(object): + def __init__(self, n): + self.positive = 0 + self.negative = 0 + +if __name__ == '__main__': + n = int(sys.stdin.readline()) + absStack = {} + min = -1 + for i in range(n): + command = int(sys.stdin.readline()) + if command == 0: + if min == -1: + print(0) + continue + if absStack[min].negative > 0: + print('-'+str(min)) + absStack[min].negative -= 1 + else: + print(min) + absStack[min].positive -= 1 + if absStack[min].negative < 1 and absStack[min].positive < 1: + del absStack[min] + if len(absStack) == 0: + min = -1 + continue + for key in absStack.keys(): + min = key + break + else: + absValue = abs(command) + if not absValue in absStack: + absStack[absValue] = Num(absValue) + if command < 0: + absStack[absValue].negative += 1 + else: + absStack[absValue].positive += 1 + if absValue < min or min < 0: + min = absValue +``` +ํ‹€๋ฆฐ ์ด์œ  key๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€๋Š”๋ฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ ์‚ฝ์ž… ์ˆœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ์ณ์ค„ ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค. + +```python +for key in absStack.keys(): + min = key + break +``` + +`Num` ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ ๊ตณ์ด ํ•„์š”์—†์„ ๊ฒƒ ๊ฐ™์•„ ์ œ๊ฑฐ ํ›„ ์ฝ”๋”ฉ์„ ์ง„ํ–‰ํ•˜์˜€๋‹ค. + +#### ์‹œ๊ฐ„์ดˆ๊ณผ + +```python +import sys + +if __name__ == '__main__': + n = int(sys.stdin.readline()) + absStack = {} + minValue = -1 + for i in range(n): + command = int(sys.stdin.readline()) + if command == 0: + if minValue == -1: + print(0) + continue + + index = minValue * -1 + if not index in absStack: + index = minValue + absStack[index] -= 1 + print(abs(index)) + if absStack[index] < 1: + del absStack[index] + if len(absStack) == 0: + minValue = -1 + continue + minValue = abs(min(list(absStack.keys()), key=abs)) + else: + if not command in absStack: + absStack[command] = 1 + else: + absStack[command] += 1 + if abs(command) < minValue or minValue < 0: + minValue = abs(command) +``` +์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ ์•„๋งˆ๋„ `if not index in absStack` ๋˜๋Š” `minValue = abs(min(list(absStack.keys()), key=abs))` ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฐ’์„ ์ฐพ๋Š” ๋ถ€๋ถ„ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™๋‹ค. + +#### + ๋‘๋ฒˆ์งธ ์‹œ๊ฐ„์ดˆ๊ณผ + +ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์œ„์žฅ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  `if not command in absStack:` ์„ `if absStack.get(command) == None:` ์œผ๋กœ ๊ณ ์ณค์œผ๋‚˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š์•˜๋‹ค. + +#### ๋งž์•˜์Šต๋‹ˆ๋‹ค. + +๋ฌธ์ œ๋ฅผ ์ž˜๋ชป์ดํ•ดํ•ด์„œ heap์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์Œ์„ ๊นจ๋‹ฌ์•˜๋‹ค. python์— `heapq` ๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์œ„์žฅ + +์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. dict ๊ฐ์ฒด์—์„œ `dict.get(key)` ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. + +```python +if clothesMap.get(c[1]) == None: + clothesMap[c[1]] = [] +clothesMap[c[1]].append(c[0]) +``` + +์ด๋Ÿฐ ์‹์œผ๋กœ key๋ฅผ ๊ฒ€์‚ฌํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1991 + +python์€ `end`๋ฅผ ํ†ตํ•ด print๋ฌธ์˜ ๋์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. `print(index, end='')` ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ํ•œ ์ค„์— ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค. (๊ธฐ๋ณธ ๊ฐ’ `\n` ) + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2957(1์ฃผ์ฐจ ์—ฐ์žฅ) \ No newline at end of file diff --git a/src/do02reen24/Review/week3.md b/src/do02reen24/Review/week3.md new file mode 100644 index 0000000..f7102ea --- /dev/null +++ b/src/do02reen24/Review/week3.md @@ -0,0 +1,172 @@ +# :fire: week3 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1316 + +map์„ ํ™œ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 60057 + +๋ฌธ์ž์—ด ๊ธธ์ด / 2 ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ๊ฐ€์žฅ ์งง์„ ๋•Œ๋ฅผ ์ฐพ์•„์ฃผ์—ˆ๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋” ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. + +## :ballot_box_with_check: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค โ€‹17685 + +#### ์‹œ๊ฐ„์ดˆ๊ณผ (18/22) + +```python +def solution(words): + answer = 0 + searchDict = {} + for word in words: + for i in range(len(word)): + w = word[:i+1] + if searchDict.get(w): + searchDict[w] += 1 + else: + searchDict[w] = 1 + + for word in words: + length = len(word) + for i in range(length): + if i+1 == length: + answer += length + break + w = word[:i+1] + if searchDict[w] == 1: + answer += i+1 + break + return answer +``` + +#### ์‹œ๊ฐ„์ดˆ๊ณผ(18/22) + +``` python +def solution(words): + answer = 0 + searchDict = {} + for word in words: + for i in range(len(word)): + w = word[:i+1] + if searchDict.get(w): + searchDict[w] += 1 + else: + searchDict[w] = 1 + + for word in words: + length = len(word) + minAnswer = searchDict[word] + ans = length + for i in range(length - 2, -1, -1): + w = word[:i+1] + if minAnswer == 1 and searchDict[w] == minAnswer: + ans = i + 1 + elif searchDict[w] < minAnswer: + minAnswer = searchDict[w] + ans = i + 1 + else: + break + answer += ans + return answer +``` + +1๋ฒˆ ์ œ์ถœ๋•Œ์™€ ๋‹ค๋ฅด๊ฒŒ ๋’ค์—์„œ๋ถ€ํ„ฐ ๊ฒ€์‚ฌํ•˜๋ฉด ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ–ˆ๋Š”๋ฐ ๋˜‘๊ฐ™์€ ๊ฒฝ์šฐ์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ๋กœ์ง ์ž์ฒด๋ฅผ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. + +#### ์‹œ๊ฐ„์ดˆ๊ณผ(18/22) + +๋งˆ๋•…ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„ ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜์˜€๋‹ค. `ํŠธ๋ผ์ด` ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ™œ์šฉ์„ ์˜๋„ํ•œ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค. + +[Trie ์ž๋ฃŒ๊ตฌ์กฐ ์˜๋ฏธ์™€ ํ™œ์šฉ](https://blog.ilkyu.kr/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%97%90%EC%84%9C-Trie-%ED%8A%B8%EB%9D%BC%EC%9D%B4-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0) ์„ ํ†ตํ•ด Trie์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +**๋ฐฉ๋ฒ• 1. Trie** + +* ํŠธ๋ฆฌ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์ผ์ข…์œผ๋กœ ์–ด๋–ค ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•  ๋•Œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” **O(n)** ์ด๋‹ค. (n์€ ๋ฌธ์ž์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด) + +* ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์— ํŠนํ™”๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. + +Trie๋ฅผ ์‚ฌ์šฉํ•ด ๋” ์ด์ƒ ๋‹จ์–ด์˜ ๋ถ„๊ธฐ์ ์ด ์—†๋Š” ์ง€์ ์„ ์ฐพ๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค. + +**๋ฐฉ๋ฒ• 2. ์ „์ฒด ๋‹จ์–ด์˜ ์‚ฌ์ „ ์ˆœ ์ •๋ ฌ** + +์ „์ฒด ๋‹จ์–ด๋ฅผ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ฉด ์ธ์ ‘ํ•œ ๋‘ ๋‹จ์–ด ์Œ๋งŒ ๋น„๊ตํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. + +**๋‚ด ์ฝ”๋“œ๋Š” ์™œ ์‹œ๊ฐ„์ดˆ๊ณผ์ผ๊นŒ?** + +Trie๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์–ด ์—ฌ๋Ÿฌ ํ’€์ด๋ฅผ ์ฐพ์•„๋ดค๋Š”๋ฐ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ฒƒ๊ณผ ํฐ ์ฐจ์ด๋ฅผ ๋ชจ๋ฅด๊ฒ ์—ˆ๋‹ค. ์–ด๋–ค ๋ถ€๋ถ„์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ผ๊นŒ? + +[dictionary ์‹œ๊ฐ„๋ณต์žก๋„](https://wayhome25.github.io/python/2017/06/14/time-complexity/) ๋ฅผ ์ฐพ์•„๋ดค์ง€๋งŒ `index`, `get` ๋ชจ๋‘ `O(1)` ์ด์—ˆ๋‹ค. + +**`list`์˜ `slice` ๋•Œ๋ฌธ์ธ๊ฐ€?** Trie์™€ ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ฒƒ์˜ ์ฐจ์ด๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ Trie๋Š” list์˜ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฒ€์‚ฌํ•  ๋ฟ์ด์ง€๋งŒ, ๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” ์•ž์˜ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— `O(n)` ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ๊ฒ€์‚ฌํ•  ๋‹ค์Œ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰ `w = word[:i+1]` ๋ถ€๋ถ„์ด ๋ฌธ์ œ์ธ์ค„ ์•Œ๊ณ  ํ•ด๋‹น ๋ถ€๋ถ„์„ ๊ณ ์ณ์„œ ๋Œ๋ ค๋ณด์•˜์œผ๋‚˜ ๋˜‘๊ฐ™์ด **์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒ**ํ–ˆ๋‹ค. + +```python +def solution(words): + answer = 0 + searchDict = {} + for word in words: + index = '' + for w in word: + index += w + if searchDict.get(index): + searchDict[index] += 1 + else: + searchDict[index] = 1 + + for word in words: + index = '' + length = len(word) + for i in range(length): + if i+1 == length: + answer += length + break + index += word[i] + if searchDict[index] == 1: + answer += i+1 + break + return answer +``` + +# :fire: ์ถ”๊ฐ€๋ฌธ์ œ + +## :ballot_box_with_check: ๋ฐฑ์ค€ 9012 + +`brackets = sys.stdin.readline().rstrip()` ์—์„œ rstrip์„ ๊ผญ ํ•ด์ค˜์•ผ ํ–ˆ๋‹ค. ์•ˆํ•ด์ค„ ๊ฒฝ์šฐ ๊ณต๋ฐฑ๋„ stack์— ๋“ค์–ด๊ฐ€ ์—ฐ์‚ฐ์ด 1ํšŒ ๋” ์ˆ˜ํ–‰๋๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1874 + +#### ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. + +```python +import sys + +if __name__ == '__main__': + t = int(sys.stdin.readline()) + stack = [] + number = 1 + result = [] + for _ in range(t): + n = int(sys.stdin.readline()) + while True: + if number > t: + print("NO") + sys.exit(1) + if not stack: + stack.append(number) + else: + top = stack[-1] + if top < n: + number += 1 + stack.append(number) + else: + stack.pop() + result.append('-') + if top == n: + break + continue + result.append('+') + for r in result: + print(r) +``` + +๋ฐฑ์ค€ ์‚ฌ์ดํŠธ์—์„œ๋Š” `sys.exit(0)` ์„ ์จ์•ผ ์˜ค๋ฅ˜๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ๋‚˜๋Š” `sys.exit(1)` ์„ ์ผ๋‹ค. ์ƒˆ๋กœ ์ œ์ถœํ•œ ์ฝ”๋“œ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ”๊พธ๊ธด ํ–ˆ์œผ๋‚˜ ์ „์ฒด ๋™์ž‘์ด ๋™์ผํ•˜๋ฏ€๋กœ ์•„๋งˆ exit ํ•จ์ˆ˜ ๋•Œ๋ฌธ์— ์ฒซ๋ฒˆ์งธ ์‹œ๋„ ๋•Œ ํ‹€๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 10799 + +`for i in range(0, len(brackets)):` ์˜ ์ค‘๊ฐ„์—์„œ i += 1์ด ์•ˆ๋จน์—ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์„ ๋ชฐ๋ผ ์ผ๋‹จ ํ•ด๋‹น ๊ฒฝ์šฐ๋ฅผ skipํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ œ์ถœํ•˜์˜€๋‹ค. python ๋ฌธ๋ฒ•์„ ์ข€ ๋” ์ฐพ์•„๋ด์•ผ๊ฒ ๋‹ค. \ No newline at end of file diff --git a/src/do02reen24/Review/week4.md b/src/do02reen24/Review/week4.md new file mode 100644 index 0000000..ffbde9e --- /dev/null +++ b/src/do02reen24/Review/week4.md @@ -0,0 +1,103 @@ +# :fire: week4 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 19238 + +#### ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. + +```python +import sys + +dr = [-1, 1, 0, 0] +dc = [0, 0, -1, 1] + +class Passenger(object): + def __init__(self, row, col, destRow, destCol): + self.row = row + self.col = col + self.destRow = destRow + self.destCol = destCol + +def pickUpPassenger(board, row, col, n): + newBoard = [[0]*n for _ in range(n)] + queue = [] + count = 0 + queue.append([row, col]) + newBoard[row][col] = -1 + while queue: + count += 1 + newQueue = [] + while queue: + r, c = queue.pop() + for i in range(0, 4): + mr = r + dr[i] + mc = c + dc[i] + if mr >= 0 and mr < n and mc >=0 and mc < n: + if board[mr][mc] > 0: + return board[mr][mc] - 1, count + if not board[mr][mc] == -1 and newBoard[mr][mc] == 0: + newBoard[mr][mc] = count + newQueue.append([mr, mc]) + queue = newQueue + return -1, -1 + +def goDestination(board, row, col, destRow, destCol, n): + newBoard = [[0]*n for _ in range(n)] + queue = [] + count = 0 + queue.append([row, col]) + newBoard[row][col] = -1 + while queue: + count += 1 + newQueue = [] + while queue: + r, c = queue.pop() + for i in range(0, 4): + mr = r + dr[i] + mc = c + dc[i] + if mr == destRow and mc == destCol: + return count + if mr >= 0 and mr < n and mc >=0 and mc < n: + if board[mr][mc] == 0: + newBoard[mr][mc] = count + newQueue.append([mr, mc]) + queue = newQueue + +def moveLocation(n): + return int(n) - 1 + +def TaxiService(): + n, m, fuel = map(int, sys.stdin.readline().split()) + board = [] + for _ in range(n): + board.append(list(map(int, sys.stdin.readline().replace('1', '-1').split()))) + + taxiRow, taxiCol = map(moveLocation, sys.stdin.readline().split()) + passengers = [] + for i in range(1, m+1): + row, col, destRow, destCol = map(moveLocation, sys.stdin.readline().split()) + board[row][col] = i + passengers.append(Passenger(row, col, destRow, destCol)) + while m > 0: + if board[taxiRow][taxiCol] > 0: + board[taxiRow][taxiCol] = 0 + else: + index, count = pickUpPassenger(board, taxiRow, taxiCol, n) + fuel -= count + if fuel < 0 or count == -1: + return -1 + taxiRow = passengers[index].row + taxiCol = passengers[index].col + board[taxiRow][taxiCol] = 0 + fee = goDestination(board, taxiRow, taxiCol, passengers[index].destRow, passengers[index].destCol, n) + fuel -= fee + if fuel < 0: + return -1 + taxiRow = passengers[index].destRow + taxiCol = passengers[index].destCol + fuel += fee*2 + m -= 1 + return fuel + +if __name__ == '__main__': + print(TaxiService()) +``` diff --git a/src/do02reen24/Review/week5.md b/src/do02reen24/Review/week5.md new file mode 100644 index 0000000..035f2e2 --- /dev/null +++ b/src/do02reen24/Review/week5.md @@ -0,0 +1,100 @@ +# :fire: week5 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1697 + +#### ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ + +```python +import sys + +n, k = map(int, sys.stdin.readline().split()) + +board = {} +board[n] = 0 +queue = [] +newQueue = [] +count = 1 +queue.append(n) +while queue: + index = queue.pop() + if board.get(index-1) == None: + newQueue.append(index-1) + board[index-1] = count + if board.get(index+1) == None: + newQueue.append(index+1) + board[index+1] = count + if board.get(index*2) == None: + newQueue.append(index*2) + board[index*2] = count + if board.get(k): + print(board[k]) + break + if not queue: + queue = newQueue + newQueue = [] + count += 1 +``` + +`dict` ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  max ๋ฒ”์œ„๋ฅผ ๊ฑธ์–ด์ฃผ์ง€ ์•Š์•„ ์ƒ๊ธด ์—๋Ÿฌ์ธ๋“ฏ ํ•˜๋‹ค. + +#### ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. + +```c++ +#include +#include + +using namespace std; +const int MAX_RANGE = 2000000; +int visit[MAX_RANGE]; + +int main() { + int n, k; + cin >> n >> k; + queue q; + queue q2; + visit[n] = -1; + q.push(n); + int count = 1; + + while (!q.empty()) { + int index = q.front(); + q.pop(); + if (index - 1 >= 0) { + if (visit[index - 1] == 0) { + q2.push(index - 1); + visit[index - 1] = count; + } + } + if (index + 1 < MAX_RANGE) { + if (visit[index + 1] == 0) { + q2.push(index + 1); + visit[index + 1] = count; + } + } + if (index * 2 < MAX_RANGE) { + if (visit[index * 2] == 0) { + q2.push(index * 2); + visit[index * 2] = count; + } + } + if (visit[k] != 0) { + cout << visit[k] << '\n'; + break; + } + if (q.empty()) { + q = q2; + q2 = queue(); + count++; + } + } + return 0; +} +``` + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2606 + +map ๊ณผ list๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 7569 + +6๊ฐ€์ง€ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด ๊ฒ€์‚ฌ๋ฅผ ํ•ด์ฃผ๊ณ  ์˜ˆ์™ธ ์กฐ๊ฑด๋“ค์„ ํ™•์ธํ•˜๋Š” ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. \ No newline at end of file diff --git a/src/do02reen24/Review/week6.md b/src/do02reen24/Review/week6.md new file mode 100644 index 0000000..ea6d8fb --- /dev/null +++ b/src/do02reen24/Review/week6.md @@ -0,0 +1,63 @@ +# :fire: week6 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1992 + +#### ์ถœ๋ ฅ ์ดˆ๊ณผ + +```python +import sys + +board = [] + +def checkBoard(startRow, endRow, startCol, endCol): + check = board[startRow][startCol] + for r in range(startRow, endRow): + for c in range(startCol, endCol): + if not check == board[r][c]: return False + return True + +def compress(n, startRow, startCol): + n = int(n / 2) + ans = [] + print(n, startRow, startCol) + if checkBoard(startRow, startRow + n, startCol, startCol + n): + ans.append(board[startRow][startCol]) + else: + ans.append(compress(n, startRow, startCol)) + if checkBoard(startRow, startRow + n, startCol + n, startCol + n + n): + ans.append(board[startRow][startCol + n]) + else: + ans.append(compress(n, startRow, startCol + n)) + if checkBoard(startRow + n, startRow + n + n, startCol, startCol + n): + ans.append(board[startRow + n][startCol]) + else: + ans.append(compress(n, startRow + n, startCol)) + if checkBoard(startRow + n, startRow + n + n, startCol + n, startCol + n + n): + ans.append(board[startRow + n][startCol + n]) + else: + ans.append(compress(n, startRow + n, startCol + n)) + return '(' + ''.join(ans) + ')' + +def findSolution(N): + if checkBoard(0, N, 0, N): + return board[0][0] + ans = compress(N, 0, 0) + return ans + +if __name__ == '__main__': + N = int(sys.stdin.readline()) + for i in range(N): + inputs = list(sys.stdin.readline().rstrip()) + board.append(inputs) + print(findSolution(N)) +``` + +ํ™•์ธ์šฉ์œผ๋กœ ์ฐ์–ด๋†“์€ print๋ฌธ์„ ์ง€์šฐ์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์˜€๋‹ค. ์•ž์œผ๋กœ๋Š” ๋” ๊ผผ๊ผผํ•˜๊ฒŒ ํ™•์ธํ•˜๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2630 + +1992 ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1780 + +2630 ๋ฌธ์ œ์™€ ์œ ์‚ฌํ–ˆ๋‹ค. /2 ๊ฐ€ ์•„๋‹Œ /3 ์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ์ ๋งŒ ์กฐ๊ธˆ ๋‹ฌ๋ž๋‹ค. \ No newline at end of file diff --git a/src/do02reen24/Review/week7.md b/src/do02reen24/Review/week7.md new file mode 100644 index 0000000..fb91e94 --- /dev/null +++ b/src/do02reen24/Review/week7.md @@ -0,0 +1,109 @@ +# :fire: week7 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1094 + +- list๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ’€๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์ž˜์•ˆ๋ผ์„œ ๊ทธ๋ƒฅ list๋กœ ํ’€์—ˆ๋‹ค. +- ์Šคํ„ฐ๋”” ๊ณ ์ฐฐ: ๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ์จ์„œ ํ’€๋ฉด ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•จ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 14889 + +- c++์˜ permutation์„ ์“ฐ๋ฉด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™์•„ c++๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. +- ์Šคํ„ฐ๋”” ๊ณ ์ฐฐ : python์˜ ๊ฒฝ์šฐ combination์„ ์จ์„œ ํ’€ ์ˆ˜ ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 18233 + +#### ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. (86%) + +```c++ +#include +#include +#include +using namespace std; + +int main() { + int n, p, e; + cin >> n >> p >> e; + vector> member; + vector isGift(n); + for (int i = 0; i < n; i++) { + int min, max; + cin >> min >> max; + member.push_back(make_pair(min, max)); + if ((n - i) <= p) isGift[i] = 1; + } + do { + int min = 0, max = 0; + int sol[20] = { 0, }; + for (int i = 0; i < n; i++) { + if (isGift[i] == 0) continue; + min += member[i].first; + max += member[i].second; + sol[i] = member[i].first; + } + int remain = e - min; + if (min <= e && max >= e) { + for (int i = 0; i < n; i++) { + if (isGift[i] == 0) continue; + int diff = member[i].second - member[i].first; + if (diff < remain) { + remain -= diff; + sol[i] += diff; + } + else { + sol[i] += remain; + break; + } + } + for (int i = 0; i < n; i++) cout << sol[i] << " "; + return 0; + } + } while (next_permutation(isGift.begin(), isGift.end())); + cout << -1 << endl; + return 0; +} +``` + +#### ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค (3%) + +```python +import sys +from itertools import combinations + +def rubberDuck(): + n, p, e = map(int, sys.stdin.readline().rstrip().split()) + member = [] + for _ in range(n): + minDuck, maxDuck = map(int, sys.stdin.readline().rstrip().split()) + member.append([minDuck, (maxDuck-minDuck)]) + user = [i for i in range(n)] + combList = list(combinations(user, p)) + + for comb in combList: + sol = [0] * n + remain = e + for i in comb: + sol[i] = member[i][0] + remain -= member[i][0] + if remain < 0: continue + for i in comb: + if remain > member[i][1]: + sol[i] += member[i][1] + remain -= member[i][1] + else: + sol[i] += remain + break + return ' '.join(map(str,sol)) + return -1 +print(rubberDuck()) +``` + +- `return ' '.join(map(str,sol))`์˜ ์กฐ๊ฑด์„ ๊ฒ€์‚ฌํ•ด์ฃผ์ง€ ์•Š์•„ ํ‹€๋ ธ์Œ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. + +```python +if remain == 0: + return ' '.join(map(str,sol)) +``` + +์œ„ ์ฒ˜๋Ÿผ ์ธํ˜•์„ ๋ชจ๋‘ ์•Œ๋งž๊ฒŒ ๋‚˜๋ˆ„์–ด์ฃผ์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ด์ฃผ์–ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1194 diff --git a/src/do02reen24/Review/week8.md b/src/do02reen24/Review/week8.md new file mode 100644 index 0000000..3d5853d --- /dev/null +++ b/src/do02reen24/Review/week8.md @@ -0,0 +1,18 @@ +# :fire: week8 + +## :ballot_box_with_check: ๋ฐฑ์ค€ 1946 + +- ๋ฌธ์ œ ์ดํ•ด๋ฅผ ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. +- ์ •๋ ฌ์„ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 11047 + +- python์˜ ๊ฒฝ์šฐ pop์„ ํ•˜๋ฉด ๋’ค๋ถ€ํ„ฐ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— array๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 11497 + +- ์—ฐ์Šตํ•˜๋ฉด์„œ ์ผ๋˜ print๋ฌธ์„ ์•ˆ์ง€์›Œ์„œ ์ถœ๋ ฅ์ดˆ๊ณผ๊ฐ€ ๋–ด๋Š”๋ฐ print ์ถœ๋ ฅ์„ ๋” ์œ ์‹ฌํžˆ ๋ณด๊ณ  ์ง€์šธ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 2504 + +- ๋ฌธ์ œ๋ฅผ ํ’€๊ธดํ–ˆ์œผ๋‚˜ ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ ์งค ์ˆ˜ ์—†๋Š”์ง€ ๋‹ค๋ฅธ ๋กœ์ง์„ ๊ณ ๋ฏผํ•ด๋ณธ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. diff --git a/src/do02reen24/Review/week9.md b/src/do02reen24/Review/week9.md new file mode 100644 index 0000000..1fb0955 --- /dev/null +++ b/src/do02reen24/Review/week9.md @@ -0,0 +1,76 @@ +# :fire: week9 + +์ฃผ์ œ : Dynamic programming + +## :ballot_box_with_check: ๋ฐฑ์ค€ 9095 + +- python์œผ๋กœ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด์ „์— ์ž‘์„ฑํ–ˆ๋˜ c++์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์—ˆ๋‹ค. + +```c++ +#include +int d[11]; +int main() { + d[0] = 1; + for (int i=1; i<=10; i++) { + if (i-1 >= 0) { + d[i] += d[i-1]; + } + if (i-2 >= 0) { + d[i] += d[i-2]; + } + if (i-3 >= 0) { + d[i] += d[i-3]; + } + } + int t; + scanf("%d",&t); + while (t--) { + int n; + scanf("%d",&n); + printf("%d\n",d[n]); + } +} +``` + +## :ballot_box_with_check: ๋ฐฑ์ค€ 11727 + +- ์ด์ „์— ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ์„ ์ฐพ์•„๋ด์„œ ํ’€์—ˆ๋‹ค. +- ์ปดํ“จํ„ฐ์˜ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ: ์ปดํ“จํ„ฐ์˜ ์ •์ˆ˜๋Š” ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ต์„ M์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค. + - (A+B) mod M = ((A mod M) + (B mod M)) mod M + - (AXB) mod M = ((A mod M) X (B mod M)) mod M + - (A-B) mod M = ((A mod M) - (B mod M)) mod M + - ๋‚˜๋ˆ„๊ธฐ๋Š” ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค. + +## :ballot_box_with_check: ๋ฐฑ์ค€ 12865 + +#### ์‹œ๊ฐ„์ดˆ๊ณผ + +```python +import sys + +def pickObject(index, sumW, sumV, isPick): + global backpack, ans + if index >= n: return + if sumW > k: return + if sumW <= k and sumV > ans: ans = sumV + w = 0 + v = 0 + if isPick: + w, v = backpack[index] + pickObject(index + 1, sumW + w, sumV + v, True) + pickObject(index + 1, sumW + w, sumV + v, False) + +n, k = map(int, sys.stdin.readline().split(' ')) +ans = 0 +backpack = [] +for _ in range(n): + w, v = map(int, sys.stdin.readline().split(' ')) + backpack.append((w, v)) + +pickObject(0, 0, 0, True) +pickObject(0, 0, 0, False) + +print(ans) +``` + +- ์žฌ๊ท€๋กœ ํ’€์ง€ ์•Š๊ณ  ๋…ผ๋ฆฌ์ ์ธ ์ƒ๊ฐ์„ ํ†ตํ•ด ์•ž์˜ ๊ฒฐ๊ณผ ์ค‘ ๋” ํฐ ๊ฒƒ์„ ๊ณจ๋ผ์•ผํ•จ์„ ์•Œ์•˜๋‹ค. diff --git a/src/do02reen24/bit-masking/baekjoon_1094.py b/src/do02reen24/bit-masking/baekjoon_1094.py new file mode 100644 index 0000000..b682520 --- /dev/null +++ b/src/do02reen24/bit-masking/baekjoon_1094.py @@ -0,0 +1,13 @@ +import sys + +if __name__ == '__main__': + x = int(sys.stdin.readline()) + stick = [64] + stick_sum = 64 + while not x == stick_sum: + half_stick = int(stick.pop() / 2) + stick.append(half_stick) + stick_sum = sum(stick) + if stick_sum < x: + stick.append(half_stick) + print(len(stick)) diff --git a/src/do02reen24/bit-masking/baekjoon_14889.cpp b/src/do02reen24/bit-masking/baekjoon_14889.cpp new file mode 100644 index 0000000..bb93544 --- /dev/null +++ b/src/do02reen24/bit-masking/baekjoon_14889.cpp @@ -0,0 +1,34 @@ +#include +#include +#include +using namespace std; +const int MAX_INT = 20; +int main() { + int n; + int ans = -1; + vector order; + int team[MAX_INT][MAX_INT]; + cin >> n; + + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) cin >> team[j][i]; + if (i < (n / 2)) order.push_back(0); + else order.push_back(1); + } + + do { + int start = 0; + int link = 0; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (i == j) continue; + if (order[i] == 0 && order[j] == 0) start += team[i][j] + team[j][i]; + if(order[i] == 1 && order[j] == 1) link += team[i][j] + team[j][i]; + } + } + int diff = abs(start - link) / 2; + if (ans == -1 || ans > diff) ans = diff; + } while (next_permutation(order.begin(), order.end())); + + cout << ans << endl; +} \ No newline at end of file diff --git a/src/do02reen24/bit-masking/baekjoon_18233.cpp b/src/do02reen24/bit-masking/baekjoon_18233.cpp new file mode 100644 index 0000000..a767379 --- /dev/null +++ b/src/do02reen24/bit-masking/baekjoon_18233.cpp @@ -0,0 +1,46 @@ +#include +#include +#include +using namespace std; + +int main() { + int n, p, e; + cin >> n >> p >> e; + vector> member; + vector isGift(n); + for (int i = 0; i < n; i++) { + int min, max; + cin >> min >> max; + member.push_back(make_pair(min, max)); + if ((n - i) <= p) isGift[i] = 1; + } + do { + int min = 0, max = 0; + int sol[20] = { 0, }; + for (int i = 0; i < n; i++) { + if (isGift[i] == 0) continue; + min += member[i].first; + max += member[i].second; + sol[i] = member[i].first; + } + int remain = e - min; + if (min <= e && max >= e) { + for (int i = 0; i < n; i++) { + if (isGift[i] == 0) continue; + int diff = member[i].second - member[i].first; + if (diff < remain) { + remain -= diff; + sol[i] += diff; + } + else { + sol[i] += remain; + remain = 0; + } + } + for (int i = 0; i < n; i++) cout << sol[i] << " "; + return 0; + } + } while (next_permutation(isGift.begin(), isGift.end())); + cout << -1 << endl; + return 0; +} \ No newline at end of file diff --git a/src/do02reen24/brute-force/baekjoon_1254.py b/src/do02reen24/brute-force/baekjoon_1254.py new file mode 100644 index 0000000..7a68939 --- /dev/null +++ b/src/do02reen24/brute-force/baekjoon_1254.py @@ -0,0 +1,22 @@ +import sys + +def isPalindrome(word, start, end): + index = 0 + while end - index > start + index: + if word[end-index] == word[start+index]: + index = index + 1 + continue + return False + return True + + +word = sys.stdin.readline().rstrip() +ans = len(word) +start, end = 0, len(word) - 1 + +while True: + if isPalindrome(word, start, end): break + ans = ans + 1 + start = start + 1 + +print(ans) diff --git a/src/do02reen24/brute-force/baekjoon_18233.py b/src/do02reen24/brute-force/baekjoon_18233.py new file mode 100644 index 0000000..1be7433 --- /dev/null +++ b/src/do02reen24/brute-force/baekjoon_18233.py @@ -0,0 +1,31 @@ +import sys +from itertools import combinations + +def rubberDuck(): + n, p, e = map(int, sys.stdin.readline().rstrip().split()) + member = [] + for _ in range(n): + minDuck, maxDuck = map(int, sys.stdin.readline().rstrip().split()) + member.append([minDuck, (maxDuck-minDuck)]) + user = [i for i in range(n)] + combList = list(combinations(user, p)) + + for comb in combList: + sol = [0] * n + remain = e + for i in comb: + sol[i] = member[i][0] + remain -= member[i][0] + if remain < 0: continue + for i in comb: + if remain > member[i][1]: + sol[i] += member[i][1] + remain -= member[i][1] + else: + sol[i] += remain + remain = 0 + break + if remain == 0: + return ' '.join(map(str,sol)) + return -1 +print(rubberDuck()) diff --git a/src/do02reen24/data-structure/baekjoon_10799.py b/src/do02reen24/data-structure/baekjoon_10799.py new file mode 100644 index 0000000..378d25c --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_10799.py @@ -0,0 +1,18 @@ +import sys + +if __name__ == '__main__': + brackets = sys.stdin.readline().rstrip() + stack = [] + result = 0 + for i in range(0, len(brackets)): + if brackets[i] == '(' and brackets[i+1] == ')': + if stack: + stack[-1] += 1 + elif brackets[i] == '(': + stack.append(0) + elif not brackets[i-1] == '(': + laser = stack.pop() + result += laser + 1 + if stack: + stack[-1] += laser + print(result) \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_11286.py b/src/do02reen24/data-structure/baekjoon_11286.py new file mode 100644 index 0000000..e612d4d --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_11286.py @@ -0,0 +1,15 @@ +import sys +import heapq + +if __name__ == '__main__': + n = int(sys.stdin.readline()) + absHeap = [] + for i in range(n): + command = int(sys.stdin.readline()) + if command == 0: + try: + print(heapq.heappop(absHeap)[1]) + except: + print(0) + else: + heapq.heappush(absHeap, (abs(command), command)) \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_1158.py b/src/do02reen24/data-structure/baekjoon_1158.py new file mode 100644 index 0000000..27fe6fe --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_1158.py @@ -0,0 +1,12 @@ +import sys + +if __name__ == '__main__': + n, k = map(int, sys.stdin.readline().split()) + permutation = list(range(1, n + 1)) + answer = [] + index = 0 + + while len(permutation): + index = (index + k - 1) % len(permutation) + answer.append(permutation.pop(index)) + print("<"+', '.join(map(str, answer))+">") \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_1406.py b/src/do02reen24/data-structure/baekjoon_1406.py new file mode 100644 index 0000000..9f40d66 --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_1406.py @@ -0,0 +1,19 @@ +import sys + +if __name__ == '__main__': + stackLeft = list(sys.stdin.readline().rstrip()) + stackRight = list() + + n = int(sys.stdin.readline().rstrip()) + for i in range(0, n): + command = list(sys.stdin.readline().split()) + if command[0] == 'L' and stackLeft: + stackRight.append(stackLeft.pop()) + elif command[0] == 'D' and stackRight: + stackLeft.append(stackRight.pop()) + elif command[0] == 'B' and stackLeft: + stackLeft.pop() + elif command[0] == 'P': + stackLeft.append(command[1]) + + print(''.join(stackLeft) + ''.join(list(reversed(stackRight)))) \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_1874.py b/src/do02reen24/data-structure/baekjoon_1874.py new file mode 100644 index 0000000..a1dafe5 --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_1874.py @@ -0,0 +1,30 @@ +import sys + +if __name__ == '__main__': + t = int(sys.stdin.readline()) + stack = [] + count = 1 + result = [] + for _ in range(t): + n = int(sys.stdin.readline()) + check = False + while count <= t: + if stack and stack[-1] == n: + stack.pop() + result.append('-') + check = True + break + stack.append(count) + result.append('+') + count += 1 + if not check and stack: + while stack: + result.append('-') + if n == stack.pop(): + check = True + break + if not check: + print('NO') + sys.exit(0) + for r in result: + print(r) \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_1991.py b/src/do02reen24/data-structure/baekjoon_1991.py new file mode 100644 index 0000000..48f28ff --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_1991.py @@ -0,0 +1,59 @@ +import sys + +class Node(object): + def __init__(self, depth, left, right): + self.depth = depth + self.left = left + self.right = right + +def preOrder(tree, index): + if index != '.': + node = tree[index] + print(index, end='') + preOrder(tree, node.left) + preOrder(tree, node.right) + return + +def inOrder(tree, index): + if index != '.': + node = tree[index] + inOrder(tree, node.left) + print(index, end='') + inOrder(tree, node.right) + return + +def postOrder(tree, index): + if index != '.': + node = tree[index] + postOrder(tree, node.left) + postOrder(tree, node.right) + print(index, end='') + return + +if __name__ == '__main__': + n = int(sys.stdin.readline()) + tree = None + treeRoot = None + + for i in range(n): + root, left, right = sys.stdin.readline().split() + depth = 0 + if tree == None: + tree = dict() + treeRoot = root + tree[root] = Node(depth, left, right) + else: + tree[root].left = left + tree[root].right = right + depth = tree[root].depth + + if not left=='.': + tree[left] = Node(depth+1, '.', '.') + if not right=='.': + tree[right] = Node(depth+1, '.', '.') + + preOrder(tree, treeRoot) + print() + inOrder(tree, treeRoot) + print() + postOrder(tree, treeRoot) \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_2346.py b/src/do02reen24/data-structure/baekjoon_2346.py new file mode 100644 index 0000000..47b1e93 --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_2346.py @@ -0,0 +1,22 @@ +import sys + +if __name__ == '__main__': + n = int(sys.stdin.readline().rstrip()) + inputs = list(map(int, sys.stdin.readline().split())) + position = list(range(1, n+1)) + balloons = [[inputs[i], position[i]] for i in range(0, n)] + + result = [] + index = 0 + while True: + b = balloons.pop(index) + result.append(b[1]) + length = len(balloons) + if length == 0: + break + if b[0] > 0: + index = (index + b[0] - 1) % length + else: + index = (index + b[0] + length) % length + + print(' '.join(map(str,result))) \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_2504.py b/src/do02reen24/data-structure/baekjoon_2504.py new file mode 100644 index 0000000..937d763 --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_2504.py @@ -0,0 +1,47 @@ +import sys + +def isValidInput(inputs): + stack = [] + try: + for char in inputs: + if char == '(' or char == '[': + stack.append(char) + continue + pre = stack.pop() + if pre == '(' and char == ')':continue + if pre == '[' and char == ']':continue + return False + except: return False + if stack: return False + return True +if __name__ == "__main__": + inputs = str(sys.stdin.readline().strip()) + result = 0 + stack = [] + if not isValidInput(inputs): + print(0) + sys.exit(0) + for char in inputs: + if char == '(' or char == '[': + stack.append(char) + continue + preValue = stack.pop() + if char == ']': + if preValue == '[': + stack.append(3) + continue + elif char == ')': + if preValue == '(': + stack.append(2) + continue + while True: + lastValue = stack.pop() + if lastValue == '(': + stack.append(preValue * 2) + break + elif lastValue == '[': + stack.append(preValue * 3) + break + else: + preValue += lastValue + print(sum(stack)) \ No newline at end of file diff --git a/src/do02reen24/data-structure/baekjoon_9012.py b/src/do02reen24/data-structure/baekjoon_9012.py new file mode 100644 index 0000000..08fbf2d --- /dev/null +++ b/src/do02reen24/data-structure/baekjoon_9012.py @@ -0,0 +1,20 @@ +import sys + +if __name__ == '__main__': + n = int(sys.stdin.readline()) + for _ in range(n): + brackets = sys.stdin.readline().rstrip() + result = 'YES' + stack = [] + for bracket in brackets: + if bracket == '(': + stack.append('(') + else: + try: + stack.pop() + except: + result = 'NO' + break + if stack: + result = 'NO' + print(result) \ No newline at end of file diff --git a/src/do02reen24/data-structure/programmers_42578.py b/src/do02reen24/data-structure/programmers_42578.py new file mode 100644 index 0000000..5d92e08 --- /dev/null +++ b/src/do02reen24/data-structure/programmers_42578.py @@ -0,0 +1,13 @@ +def solution(clothes): + answer = 1 + clothesMap = dict() + for c in clothes: + if clothesMap.get(c[1]) == None: + clothesMap[c[1]] = [] + clothesMap[c[1]].append(c[0]) + + for value in clothesMap.values(): + answer *= (len(value) + 1) + + answer -= 1 + return answer \ No newline at end of file diff --git a/src/do02reen24/divide-and-conquer/baekjoon_1780.py b/src/do02reen24/divide-and-conquer/baekjoon_1780.py new file mode 100644 index 0000000..c42586b --- /dev/null +++ b/src/do02reen24/divide-and-conquer/baekjoon_1780.py @@ -0,0 +1,43 @@ +import sys + +board = [] + +minus = 0 +zero = 0 +plus = 0 + +def checkBoard(startRow, endRow, startCol, endCol): + check = board[startRow][startCol] + for r in range(startRow, endRow): + for c in range(startCol, endCol): + if not check == board[r][c]: return False + global minus + global zero + global plus + if check == -1: minus += 1 + elif check == 0: zero += 1 + elif check == 1: plus += 1 + return True + +def makeRange(n): + return[[0,0],[0,n],[0,2*n],[n,0],[n,n],[n,2*n],[2*n,0],[2*n,n],[2*n,2*n]] + +def compress(n, startRow, startCol): + n = int(n / 3) + ranges = makeRange(n) + for r, c in ranges: + if not checkBoard(startRow + r, startRow + r + n, startCol + c, startCol + c + n): compress(n, startRow + r, startCol + c) + +def findSolution(n): + if checkBoard(0, n, 0, n): return + compress(n, 0, 0) + +if __name__ == '__main__': + n = int(sys.stdin.readline()) + for _ in range(0, n): + inputs = list(map(int, sys.stdin.readline().split(' '))) + board.append(inputs) + findSolution(n) + print(minus) + print(zero) + print(plus) \ No newline at end of file diff --git a/src/do02reen24/divide-and-conquer/baekjoon_1992.py b/src/do02reen24/divide-and-conquer/baekjoon_1992.py new file mode 100644 index 0000000..e226a51 --- /dev/null +++ b/src/do02reen24/divide-and-conquer/baekjoon_1992.py @@ -0,0 +1,44 @@ +import sys + +board = [] + +def checkBoard(startRow, endRow, startCol, endCol): + check = board[startRow][startCol] + for r in range(startRow, endRow): + for c in range(startCol, endCol): + if not check == board[r][c]: return False + return True + +def compress(n, startRow, startCol): + n = int(n / 2) + ans = [] + if checkBoard(startRow, startRow + n, startCol, startCol + n): + ans.append(board[startRow][startCol]) + else: + ans.append(compress(n, startRow, startCol)) + if checkBoard(startRow, startRow + n, startCol + n, startCol + n + n): + ans.append(board[startRow][startCol + n]) + else: + ans.append(compress(n, startRow, startCol + n)) + if checkBoard(startRow + n, startRow + n + n, startCol, startCol + n): + ans.append(board[startRow + n][startCol]) + else: + ans.append(compress(n, startRow + n, startCol)) + if checkBoard(startRow + n, startRow + n + n, startCol + n, startCol + n + n): + ans.append(board[startRow + n][startCol + n]) + else: + ans.append(compress(n, startRow + n, startCol + n)) + return '(' + ''.join(ans) + ')' + +def findSolution(N): + if checkBoard(0, N, 0, N): + return board[0][0] + ans = compress(N, 0, 0) + return ans + +if __name__ == '__main__': + N = int(sys.stdin.readline()) + for i in range(N): + inputs = list(sys.stdin.readline().rstrip()) + board.append(inputs) + print(findSolution(N)) \ No newline at end of file diff --git a/src/do02reen24/divide-and-conquer/baekjoon_2630.py b/src/do02reen24/divide-and-conquer/baekjoon_2630.py new file mode 100644 index 0000000..b431a2d --- /dev/null +++ b/src/do02reen24/divide-and-conquer/baekjoon_2630.py @@ -0,0 +1,40 @@ +import sys + +board = [] +blue = 0 +white = 0 + +def checkBoard(startRow, endRow, startCol, endCol): + check = board[startRow][startCol] + for r in range(startRow, endRow): + for c in range(startCol, endCol): + if not check == board[r][c] : return False + global blue + global white + if check == 1: blue = blue + 1 + elif check == 0: white = white + 1 + return True + +def compress(n, startRow, startCol): + n = int(n / 2) + if not checkBoard(startRow, startRow + n, startCol, startCol + n): + compress(n, startRow, startCol) + if not checkBoard(startRow, startRow + n, startCol + n, startCol + n + n): + compress(n, startRow, startCol + n) + if not checkBoard(startRow + n, startRow + n + n, startCol, startCol + n): + compress(n, startRow + n, startCol) + if not checkBoard(startRow + n, startRow + n + n, startCol + n, startCol + n + n): + compress(n, startRow + n, startCol + n) + +def findSolution(N): + if checkBoard(0, N, 0, N): return + compress(N, 0, 0) + +if __name__ == '__main__': + N = int(sys.stdin.readline().rstrip()) + for _ in range(N): + inputs = list(map(int, sys.stdin.readline().split(' '))) + board.append(inputs) + findSolution(N) + print(white) + print(blue) \ No newline at end of file diff --git a/src/do02reen24/dynamic-programming/baekjoon_1010.py b/src/do02reen24/dynamic-programming/baekjoon_1010.py new file mode 100644 index 0000000..7e3b1fc --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_1010.py @@ -0,0 +1,12 @@ +import sys +from math import factorial + +def combination(n, c): + return int(factorial(n) / (factorial(n-c) * factorial(c))) + +if __name__ == "__main__": + t = int(sys.stdin.readline()) + for _ in range(t): + n, m = map(int, sys.stdin.readline().split(' ')) + ans = combination(m,n) + print(ans) diff --git a/src/do02reen24/dynamic-programming/baekjoon_1149.py b/src/do02reen24/dynamic-programming/baekjoon_1149.py new file mode 100644 index 0000000..f8039f3 --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_1149.py @@ -0,0 +1,17 @@ +import sys + +n = int(sys.stdin.readline()) +RGB = [] +for _ in range(n): + r, g, b = map(int, sys.stdin.readline().split()) + RGB.append((r, g, b)) + +r_cost, g_cost, b_cost = [0], [0], [0] + +for i in range(0, n): + r, g, b = RGB[i] + r_cost.append(r + min(g_cost[i], b_cost[i])) + g_cost.append(g + min(r_cost[i], b_cost[i])) + b_cost.append(b + min(r_cost[i], g_cost[i])) + +print(min(r_cost[n],g_cost[n],b_cost[n])) diff --git a/src/do02reen24/dynamic-programming/baekjoon_11727.py b/src/do02reen24/dynamic-programming/baekjoon_11727.py new file mode 100644 index 0000000..4ff854d --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_11727.py @@ -0,0 +1,9 @@ +import sys + +if __name__ == "__main__": + n = int(sys.stdin.readline()) + res = [1 , 1] + for i in range(2, n + 1): + res.append(res[i-1] + res[i-2] + res[i-2]) + res[i] = int(res[i] % 10007) + print(res[n]) \ No newline at end of file diff --git a/src/do02reen24/dynamic-programming/baekjoon_1932.py b/src/do02reen24/dynamic-programming/baekjoon_1932.py new file mode 100644 index 0000000..16f22f4 --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_1932.py @@ -0,0 +1,16 @@ +import sys + +if __name__ == "__main__": + n = int(sys.stdin.readline()) + triangle = [] + best = [] + for i in range(n): + triangle.append(list(map(int, sys.stdin.readline().rstrip().split(' ')))) + best.append([0] * (i+1)) + best[0][0] = triangle[0][0] + for i in range(1, n): + best[i][0] = triangle[i][0] + best[i-1][0] + for k in range(1, i): + best[i][k] = triangle[i][k] + max(best[i-1][k-1], best[i-1][k]) + best[i][i] = triangle[i][i] + best[i-1][i-1] + print(max(best[n-1])) diff --git a/src/do02reen24/dynamic-programming/baekjoon_2011.py b/src/do02reen24/dynamic-programming/baekjoon_2011.py new file mode 100644 index 0000000..581a1ee --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_2011.py @@ -0,0 +1,20 @@ +import sys + +def decodeNum(): + word = sys.stdin.readline().rstrip() + length = len(word) + if word[0] == '0': return 0 + sol = [1] * (length + 1) + for i in range(1, length): + prev = int(word[i-1]+word[i]) + now = int(word[i]) + if prev == 10 or prev == 20: + sol[i+1] = sol[i-1] + elif 11 <= prev and prev <= 26: + sol[i+1] = (sol[i] + sol[i-1]) % 1000000 + elif 1 <= now and now <= 9: + sol[i+1] = sol[i] + else: return 0 + return sol[length] + +print(int(decodeNum())) diff --git a/src/do02reen24/dynamic-programming/baekjoon_2502.py b/src/do02reen24/dynamic-programming/baekjoon_2502.py new file mode 100644 index 0000000..98ae5b1 --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_2502.py @@ -0,0 +1,21 @@ +import sys + +def fibonacci(x): + if x < 2: return 1 + if data[x] != 0: return data[x] + else: + data[x] = fibonacci(x-1) + fibonacci(x-2) + return data[x] + +d, k = map(int, sys.stdin.readline().split()) +data = [0] * d + +f1 = fibonacci(d-3) +f2 = fibonacci(d-2) +for a in range(1, int(k/2) + 1): + sub = k - (f1 * a) + b = int(sub/f2) + if (f1 * a) + (f2 * b) == k: + print(a) + print(b) + break \ No newline at end of file diff --git a/src/do02reen24/dynamic-programming/baekjoon_2579.py b/src/do02reen24/dynamic-programming/baekjoon_2579.py new file mode 100644 index 0000000..8987553 --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_2579.py @@ -0,0 +1,16 @@ +import sys + +def sol(): + n = int(sys.stdin.readline()) + score = [] + for _ in range(n): + score.append(int(sys.stdin.readline())) + + if n <= 2: return sum(score) + + scoreSum = [score[0], score[0]+score[1], max(score[0],score[1])+score[2]] + for i in range(3, n): + scoreSum.append(score[i]+max(score[i-1]+scoreSum[i-3], scoreSum[i-2])) + return scoreSum.pop() + +print(sol()) \ No newline at end of file diff --git a/src/do02reen24/dynamic-programming/baekjoon_9059.py b/src/do02reen24/dynamic-programming/baekjoon_9059.py new file mode 100644 index 0000000..a86e11b --- /dev/null +++ b/src/do02reen24/dynamic-programming/baekjoon_9059.py @@ -0,0 +1,19 @@ +import sys +sys.setrecursionlimit(300000) + +def findSum(count, n): + ans = 0 + for i in range(1, 4): + if count == n: + ans += 1 + break + elif count > n: + return 0 + ans += findSum(count + i, n) + return ans + +if __name__ == "__main__": + t = int(sys.stdin.readline()) + for _ in range(t): + n = int(sys.stdin.readline()) + print(findSum(0, n)) \ No newline at end of file diff --git a/src/do02reen24/etc/baekjoon_12731.py b/src/do02reen24/etc/baekjoon_12731.py new file mode 100644 index 0000000..17dc125 --- /dev/null +++ b/src/do02reen24/etc/baekjoon_12731.py @@ -0,0 +1,54 @@ +import sys + +def getIntTime(time): + h = int(time[0:2]) * 60 + m = int(time[3:5]) + return h + m + +def changeInt(start, end, time): + return [getIntTime(start), getIntTime(end) + time] + +if __name__ == "__main__": + t = int(sys.stdin.readline()) + for i in range(t): + time = int(sys.stdin.readline()) + na, nb = map(int, sys.stdin.readline().split(' ')) + a_list, b_list = [], [] + for _ in range(na): + start , end = map(str, sys.stdin.readline().rstrip().split(' ')) + a_list.append(changeInt(start, end, time)) + for _ in range(nb): + start , end = map(str, sys.stdin.readline().rstrip().split(' ')) + b_list.append(changeInt(start, end, time)) + a_list.sort() + b_list.sort() + + sol_A, sol_B = 0, 0 + a_train, b_train = [], [] + + while True: + train_type = None + train = None + if a_list and b_list: + if a_list[0] < b_list[0]: train_type = 'a' + else: train_type = 'b' + elif a_list: train_type = 'a' + elif b_list: train_type = 'b' + else: break + + if train_type == 'a': + start, end = a_list.pop(0) + if a_train and a_train[0] <= start: + a_train.pop(0) + else: sol_A += 1 + b_train.append(end) + b_train.sort() + if train_type == 'b': + start, end = b_list.pop(0) + if b_train and b_train[0] <= start: + b_train.pop(0) + else: sol_B += 1 + a_train.append(end) + a_train.sort() + + print("Case #"+str(i+1)+":",sol_A,sol_B) \ No newline at end of file diff --git a/src/do02reen24/etc/programmers_12981.js b/src/do02reen24/etc/programmers_12981.js new file mode 100644 index 0000000..1411e33 --- /dev/null +++ b/src/do02reen24/etc/programmers_12981.js @@ -0,0 +1,27 @@ +const failUser = (n, index) => { + let person = index % n; + let order = Math.floor(index / n) + 1; + if (person === 0) { + person = n; + order -= 1; + } + return [person, order]; +}; + +const getLastChar = (word) => word.charAt(word.length - 1); + +const solution = (n, words) => { + const dictionary = {}; + let lastChar = words[0][0]; + for (let index = 0; index < words.length; index += 1) { + const word = words[index]; + if (lastChar === word[0] && dictionary[word] === undefined) { + dictionary[word] = true; + lastChar = getLastChar(word); + continue; + } + return failUser(n, index + 1); + } + + return [0, 0]; +}; diff --git a/src/do02reen24/etc/programmers_42578.js b/src/do02reen24/etc/programmers_42578.js new file mode 100644 index 0000000..39d57b9 --- /dev/null +++ b/src/do02reen24/etc/programmers_42578.js @@ -0,0 +1,19 @@ +const getCombinationNumber = (object) => { + let combination = 1; + for (const key in object) { + const itemLength = object[key].length + 1; + combination *= itemLength; + } + return combination; +}; + +const solution = (clothes) => { + const closet = {}; + clothes.forEach(([cloth, clothType]) => { + closet[clothType] + ? closet[clothType].push(cloth) + : (closet[clothType] = [cloth]); + }); + + return getCombinationNumber(closet) - 1; +}; diff --git a/src/do02reen24/greedy/baekjoon_11047.py b/src/do02reen24/greedy/baekjoon_11047.py new file mode 100644 index 0000000..801c5dc --- /dev/null +++ b/src/do02reen24/greedy/baekjoon_11047.py @@ -0,0 +1,14 @@ +import sys + +if __name__ == "__main__": + n, k = map(int, sys.stdin.readline().split(' ')) + coin = [] + ans = 0 + for _ in range(n): + coin.append(int(sys.stdin.readline())) + while coin: + money = coin.pop() + quotient = int(k / money) + k -= quotient * money + ans += quotient + print(ans) \ No newline at end of file diff --git a/src/do02reen24/greedy/baekjoon_11399.py b/src/do02reen24/greedy/baekjoon_11399.py new file mode 100644 index 0000000..7942bb5 --- /dev/null +++ b/src/do02reen24/greedy/baekjoon_11399.py @@ -0,0 +1,13 @@ +import sys + +n = int(sys.stdin.readline()) +p = list(map(int, sys.stdin.readline().split())) +p.sort() + +ans = 0 +waitSum = 0 + +for num in p: + waitSum = waitSum + num + ans = ans + waitSum +print(ans) diff --git a/src/do02reen24/greedy/baekjoon_11497.py b/src/do02reen24/greedy/baekjoon_11497.py new file mode 100644 index 0000000..7b187d6 --- /dev/null +++ b/src/do02reen24/greedy/baekjoon_11497.py @@ -0,0 +1,15 @@ +import sys + +if __name__ == "__main__": + T = int(sys.stdin.readline()) + for _ in range(T): + n = int(sys.stdin.readline()) + log = list(map(int, sys.stdin.readline().split(' '))) + log.sort() + level = log[1] - log[0] + lastLevel = log[n-1] - log[n-2] + if lastLevel > level: level = lastLevel + for i in range(0, n - 2): + tempLevel = log[i+2] - log[i] + if tempLevel > level: level = tempLevel + print(level) \ No newline at end of file diff --git a/src/do02reen24/greedy/baekjoon_17609.py b/src/do02reen24/greedy/baekjoon_17609.py new file mode 100644 index 0000000..59c7065 --- /dev/null +++ b/src/do02reen24/greedy/baekjoon_17609.py @@ -0,0 +1,27 @@ +import sys + +def getPalindrome(word, length): + index = 0 + while length - index > index: + if word[index] == word[length - index]: + index = index + 1 + continue + return index + return -1 + +def isPalindrome(word, length): + index = getPalindrome(word, length) + if index == -1: return 0 + + deleteLeft = word[:index] + word[index+1:] + if getPalindrome(deleteLeft, len(deleteLeft) - 1) == -1: return 1 + + deleteRight = word[:length - index] + word[length - index+1:] + if getPalindrome(deleteRight, len(deleteRight) - 1) == -1: return 1 + + return 2 + +n = int(sys.stdin.readline()) +for _ in range(n): + word = sys.stdin.readline().rstrip() + print(isPalindrome(word, len(word) - 1)) diff --git a/src/do02reen24/greedy/baekjoon_1946.py b/src/do02reen24/greedy/baekjoon_1946.py new file mode 100644 index 0000000..4d93037 --- /dev/null +++ b/src/do02reen24/greedy/baekjoon_1946.py @@ -0,0 +1,19 @@ +import sys + +if __name__ == "__main__": + T = int(sys.stdin.readline()) + for _ in range(T): + n = int(sys.stdin.readline()) + applicant = [] + for i in range(n): + rankA, rankB = map(int, sys.stdin.readline().split(' ')) + applicant.append([rankA, rankB]) + applicant.sort(key = lambda rank: rank[0]) + + minB = applicant[0][1] + ans = 0 + for rankA, rankB in applicant: + if rankB <= minB: + minB = rankB + ans += 1 + print(ans) \ No newline at end of file diff --git a/src/do02reen24/simulation/programmers_64061.js b/src/do02reen24/simulation/programmers_64061.js new file mode 100644 index 0000000..cc390b6 --- /dev/null +++ b/src/do02reen24/simulation/programmers_64061.js @@ -0,0 +1,35 @@ +const getTopDollIndex = (board, index) => { + let topIndex = -1; + for (const line of board) { + topIndex = topIndex + 1; + if (line[index] !== 0) { + return topIndex; + } + } + return -1; +}; + +const solution = (board, moves) => { + let answer = 0; + const basket = []; + + for (const move of moves) { + const dollX = move - 1; + const dollY = getTopDollIndex(board, dollX); + if (dollY === -1) continue; + + const doll = board[dollY][dollX]; + board[dollY][dollX] = 0; + + const top = basket.pop(); + if (top === doll) { + answer = answer + 2; + continue; + } else if (top) { + basket.push(top); + } + basket.push(doll); + } + + return answer; +}; diff --git a/src/do02reen24/string/baekjoon_1316.py b/src/do02reen24/string/baekjoon_1316.py new file mode 100644 index 0000000..370b877 --- /dev/null +++ b/src/do02reen24/string/baekjoon_1316.py @@ -0,0 +1,20 @@ +import sys + +if __name__ == '__main__': + n = int(sys.stdin.readline()) + count = 0 + for _ in range(n): + word = sys.stdin.readline().rstrip() + check = {} + before = word[0] + for w in word: + if check.get(w) == None: + check[w] = True + before = w + elif before == w: + continue + else: + count -= 1 + break + count += 1 + print(count) \ No newline at end of file diff --git a/src/do02reen24/string/programmers_12904.js b/src/do02reen24/string/programmers_12904.js new file mode 100644 index 0000000..7547c24 --- /dev/null +++ b/src/do02reen24/string/programmers_12904.js @@ -0,0 +1,56 @@ +const isSameWord = (word, pre, next) => { + if (pre < 0 || next >= word.length) { + return false; + } + if (word[pre] !== word[next]) { + return false; + } + return true; +}; + +const oddPalindrome = (word, start) => { + let index = 1; + while (true) { + const pre = start - index; + const next = start + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + index = index - 1; + break; + } + return index * 2 + 1; +}; + +const evenPalindrome = (word, start) => { + let index = 0; + while (true) { + const pre = start - index; + const next = start + 1 + index; + if (isSameWord(word, pre, next)) { + index = index + 1; + continue; + } + break; + } + return index * 2; +}; + +const isPalindrome = (word, start) => { + const oddResult = oddPalindrome(word, start); + const evenResult = evenPalindrome(word, start); + return Math.max(oddResult, evenResult); +}; + +const solution = (s) => { + let maxLength = 0; + for (let index = 0; index < s.length; index++) { + const result = isPalindrome(s, index); + if (maxLength < result) { + maxLength = result; + } + } + + return maxLength; +}; diff --git a/src/do02reen24/string/programmers_60057.py b/src/do02reen24/string/programmers_60057.py new file mode 100644 index 0000000..af36755 --- /dev/null +++ b/src/do02reen24/string/programmers_60057.py @@ -0,0 +1,41 @@ +def combineString(string, word, count): + if not count == 1: + string += str(count) + string += word + return string + +def compression(string, length): + compString = '' + temp = string[:length] + count = 0 + index = list(range(0, len(string), length)) + for i in index: + now = string[i:i+length] + if now == temp: + count+=1 + else: + compString = combineString(compString, temp, count) + count = 1 + temp = now + if i == index[-1]: + compString = combineString(compString, temp, count) + return len(compString) + +def solution(s): + answer = len(s) + for length in range(1, int(len(s) / 2) + 1): + result = compression(s, length) + if answer > result: + answer = result + return answer + +sList = [ + "aabbaccc", + "ababcdcdababcdcd", + "abcabcdede", + "abcabcabcabcdededededede", + "xababcdcdababcdcd" +] + +for s in sList: + print(solution(s)) \ No newline at end of file diff --git a/src/do02reen24/string/programmers_64065.js b/src/do02reen24/string/programmers_64065.js new file mode 100644 index 0000000..df4a831 --- /dev/null +++ b/src/do02reen24/string/programmers_64065.js @@ -0,0 +1,32 @@ +const countingNumber = (arr) => { + const counts = {}; + arr.forEach((n) => (counts[n] = (counts[n] || 0) + 1)); + return counts; +}; + +const sortByValue = (dict) => { + const arr = []; + for (const key in dict) { + const value = dict[key]; + arr.push([Number(key), value]); + } + return arr.sort((pre, next) => next[1] - pre[1]); +}; + +const getKeyList = (arr) => { + const keys = []; + for (const pair of arr) { + const key = pair[0]; + keys.push(key); + } + return keys; +}; + +const solution = (s) => { + const deleteBracket = s.replace(/[{}]/gi, ''); + const numberList = deleteBracket.split(','); + const counts = countingNumber(numberList); + const valueList = sortByValue(counts); + const answer = getKeyList(valueList); + return answer; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/1_BinaryGap.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/1_BinaryGap.js" new file mode 100644 index 0000000..09f2236 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/1_BinaryGap.js" @@ -0,0 +1,16 @@ +const solution = (N) => { + let maxLength = 0; + const bin = N.toString(2).split(''); + + bin.reduce((length, word) => { + if (word === '1') { + if (maxLength < length) maxLength = length; + return 0; + } + return length + 1; + }, 0); + + return maxLength; +}; + +console.log(solution(32)); diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_CyclicRotation.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_CyclicRotation.js" new file mode 100644 index 0000000..d0580a2 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_CyclicRotation.js" @@ -0,0 +1,9 @@ +const solution = (A, K) => { + const length = A.length; + const k = K % length; + const front = A.slice(length - k, length); + const end = A.slice(0, length - k); + return front.concat(end); +}; + +console.log(solution([3, 8, 9, 7, 6], 3)); diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_OddOccurrencesInArray.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_OddOccurrencesInArray.js" new file mode 100644 index 0000000..873c722 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/2_OddOccurrencesInArray.js" @@ -0,0 +1,11 @@ +const solution = (A) => { + const count = A.reduce((arr, num) => { + if (arr[num] === undefined) arr[num] = 1; + else arr[num] += 1; + return arr; + }, {}); + for (const num in count) { + if (count[num] % 2 !== 0) return num; + } + return -1; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_FrogJmp.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_FrogJmp.js" new file mode 100644 index 0000000..dc00aa1 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_FrogJmp.js" @@ -0,0 +1,3 @@ +const solution = (X, Y, D) => { + return Math.ceil((Y - X) / D); +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_PermMissingElem.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_PermMissingElem.js" new file mode 100644 index 0000000..9833357 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_PermMissingElem.js" @@ -0,0 +1,12 @@ +const solution = (A) => { + const N = A.length + 1; + const isNum = {}; + A.forEach((a) => { + isNum[a] = true; + }); + for (let n = 1; n < N + 1; n += 1) { + if (isNum[n] === true) continue; + return n; + } + return -1; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" new file mode 100644 index 0000000..3fc11e9 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/3_TapeEquilibrium.js" @@ -0,0 +1,13 @@ +const solution = (A) => { + let answer; + let frontSum = 0; + let backSum = A.reduce((a, b) => a + b, 0); + for (let i = 0; i < A.length - 1; i += 1) { + frontSum += A[i]; + backSum -= A[i]; + const absSub = Math.abs(frontSum - backSum); + if (absSub < answer || answer === undefined) answer = absSub; + } + + return answer; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/7_StoneWall.js" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/7_StoneWall.js" new file mode 100644 index 0000000..67dd48d --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/7_StoneWall.js" @@ -0,0 +1,20 @@ +const solution = (H) => { + const queue = [H]; + let block = 0; + while (queue.length > 0) { + const h = queue.pop(); + if (h.length === 0) continue; + const min = Math.min.apply(null, h); + const remain = h.reduce((arr, cur) => { + if (cur === min) { + queue.push(arr); + return []; + } + arr.push(cur); + return arr; + }, []); + queue.push(remain); + block += 1; + } + return block; +}; diff --git "a/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" new file mode 100644 index 0000000..2debed9 --- /dev/null +++ "b/src/do02reen24/\354\213\244\354\240\204\354\227\260\354\212\265/codility/score.md" @@ -0,0 +1,21 @@ +# ๐Ÿ“‹ Codility ์ ์ˆ˜ ๊ธฐ๋ก + +| Lesson | ๋ฌธ์ œ | ์ ์ˆ˜ | ๋น„๊ณ  | ์ตœ์ข… ์ œ์ถœ ๋‚ ์งœ | +| :-----------------: | :-------------------: | :--: | :-------------------: | :------------: | +| 1-Iterations | BinaryGap | 100 | - | 2021-01-05 | +| 2-Arrays | CyclicRotation | 100 | - | 2021-01-05 | +| 2-Arrays | OddOccurrencesInArray | 100 | - | 2021-01-05 | +| 3-Time Complexity | FrogJmp | 100 | - | 2021-01-06 | +| 3-Time Complexity | PermMissingElem | 100 | - | 2021-01-06 | +| 3-Time Complexity | TapeEquilibrium | 100 | - | 2021-01-06 | +| 7-Stacks and Queues | StoneWall | 85 | ์ •ํ™•๋„ 100%, ์„ฑ๋Šฅ 77% | 2021-01-05 | + +# ๐Ÿ“š Perfect Lesson + +> ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ 100%๋กœ ๋๋‚ธ Lesson + +* Lesson1 - Iterations + +* Lesson2 - Arrays +* Lesson3 - Time Complexity + diff --git a/src/grap3fruit/js/boj/input1_1.js b/src/grap3fruit/js/boj/input1_1.js new file mode 100644 index 0000000..bdf20f4 --- /dev/null +++ b/src/grap3fruit/js/boj/input1_1.js @@ -0,0 +1,16 @@ +const solution = (N, data) => { + console.log(N); + console.log(data); +}; + +let fs = require('fs'); +let input = fs.readFileSync('test').toString().split('\n'); + +const N = +input[0]; +const data = []; +for (let i = 1; i < N + 1; i++) { + // ์œ„์—์„œ N์„ ๋ฐ›์„๋–„ input[0]์ด ๋น ์ ธ๋‚˜๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— 1~N์„ ๋ฐ›์•„์•ผํ•œ๋‹ค. + data.push(input[i].split(' ').map((el) => +el)); +} + +solution(N, data); diff --git a/src/grap3fruit/js/boj/input1_2.js b/src/grap3fruit/js/boj/input1_2.js new file mode 100644 index 0000000..cf99e7a --- /dev/null +++ b/src/grap3fruit/js/boj/input1_2.js @@ -0,0 +1,19 @@ +const solution = (N, info, data) => { + console.log(N); + const [X, Y] = info; + console.log(X, Y); + console.log(data); +}; + +let fs = require('fs'); +let input = fs.readFileSync('test2').toString().split('\n'); + +const N = +input[0]; +const info = input[1].split(' ').map((el) => +el); +const data = []; +for (let i = 2; i < N + 2; i++) { + // ์œ„์—์„œ N์„ ๋ฐ›์„๋–„ input[0]์ด ๋น ์ ธ๋‚˜๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— 1~N์„ ๋ฐ›์•„์•ผํ•œ๋‹ค. + data.push(input[i].split(' ').map((el) => +el)); +} + +solution(N, info, data); diff --git a/src/grap3fruit/js/boj/test b/src/grap3fruit/js/boj/test new file mode 100644 index 0000000..80de847 --- /dev/null +++ b/src/grap3fruit/js/boj/test @@ -0,0 +1,4 @@ +3 +1 2 3 +2 3 4 +3 4 5 \ No newline at end of file diff --git a/src/grap3fruit/js/boj/test2 b/src/grap3fruit/js/boj/test2 new file mode 100644 index 0000000..67313fa --- /dev/null +++ b/src/grap3fruit/js/boj/test2 @@ -0,0 +1,5 @@ +3 +2 3 +1 2 3 +2 3 4 +3 4 5 \ No newline at end of file diff --git a/src/grap3fruit/js/doublyLinkedList.js b/src/grap3fruit/js/doublyLinkedList.js new file mode 100644 index 0000000..ead5907 --- /dev/null +++ b/src/grap3fruit/js/doublyLinkedList.js @@ -0,0 +1,108 @@ +class Node { + constructor(item) { + this.prev = null; + this.next = null; + this.item = item; + } +} + +class DoublyLinkedList { + constructor() { + this.head = new Node(null); + this.tail = new Node(null); + this.head.next = this.tail; + this.tail.prev = this.head; + this.length = 0; + } + + getLength() { + return this.length; + } + + push(item) { + const node = new Node(item); + this.length += 1; + + if (this.head.next === this.tail) { + node.prev = this.head; + node.next = this.tail; + this.head.next = node; + this.tail.prev = node; + return; + } + + let lastNode = this.tail.prev; + node.next = this.tail; + node.prev = lastNode; + lastNode.next = node; + this.tail.prev = node; + return; + } + + print() { + let current = this.head.next; + while (true) { + if (current === this.tail) { + return; + } + console.log(current.item); + current = current.next; + } + } + + pop() { + if (this.length === 0) { + return undefined; + } + this.length -= 1; + const popedNode = this.tail.prev; + popedNode.prev.next = this.tail; + this.tail.prev = popedNode.prev; + return popedNode.item; + } + + popLeft() { + if (this.length === 0) { + return undefined; + } + this.length -= 1; + const popedNode = this.head.next; + popedNode.next.prev = this.head; + this.head.next = popedNode.next; + return popedNode.item; + } + + filter(callback) { + let current = this.head.next; + const result = []; + while (current !== this.tail) { + console.log(current.item); + if (callback(current.item)) { + result.push(current.item); + } + current = current.next; + } + return result; + } +} + +const dl = new DoublyLinkedList(); + +dl.push([1, 0]); +dl.push([2, 1]); +dl.push([3, 1]); +dl.push([4, 2]); +dl.push([5, 2]); +console.log(dl.filter((el) => el[0] === 1 && el[1] === 0)); +console.log('---'); +console.log(dl.getLength()); +console.log('---'); +console.log(dl.popLeft()); +console.log('---'); +dl.print(); +console.log('---'); +console.log(dl.pop()); +console.log('---'); +console.log(dl.getLength()); +console.log('---'); +dl.print(); diff --git a/src/grap3fruit/js/goorm/input1.js b/src/grap3fruit/js/goorm/input1.js new file mode 100644 index 0000000..2acbab0 --- /dev/null +++ b/src/grap3fruit/js/goorm/input1.js @@ -0,0 +1,33 @@ +const solution = (N, data) => { + console.log(N); + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let N = null; +let count = 0; +const data = []; + +rl.on('line', function (line) { + console.log(line); + if (!N) { + N = +line; + } else { + // data.push(line.split(' ').map((el) => +el)); + // data.push(line.split('').map((el) => +el)); + // data.push(line.split('').map((el) => el)); + data.push(line); + } + count += 1; + if (count === N) { + rl.close(); + } +}).on('close', function () { + solution(N, data); + process.exit(); +}); diff --git a/src/grap3fruit/js/goorm/input1_1.js b/src/grap3fruit/js/goorm/input1_1.js new file mode 100644 index 0000000..de07578 --- /dev/null +++ b/src/grap3fruit/js/goorm/input1_1.js @@ -0,0 +1,23 @@ +const solution = (data) => { + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let data = []; + +rl.on('line', function (line) { + data.push(line); + // data = line.split('').map((el) => el); + // data = line.split(' ').map((el) => el); + // data = line.split('').map((el) => +el); + + rl.close(); +}).on('close', function () { + solution(data); + process.exit(); +}); diff --git a/src/grap3fruit/js/goorm/input1_2.js b/src/grap3fruit/js/goorm/input1_2.js new file mode 100644 index 0000000..ba0ba7e --- /dev/null +++ b/src/grap3fruit/js/goorm/input1_2.js @@ -0,0 +1,42 @@ +const solution = (N, info, data) => { + console.log(N); + const [X, Y] = info; + console.log(X, Y); + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let N = null; +let info = null; +let count = 0; +const data = []; + +rl.on('line', function (line) { + if (!N) { + // N์ด null์ด๋ฉด + N = +line; + } else if (!info) { + // N์ด null์ด ์•„๋‹Œ๋ฐ, info๊ฐ€ null์ด๋ฉด + info = line.split(' ').map((el) => +el); + } else { + // N๊ณผ info๊ฐ€ null์ด ์•„๋‹ˆ๋ฉด + data.push(line); + // data.push(line.split('').map((el) => +el)); + // data.push(line.split('').map((el) => el)); + // data.push(line.split(' ').map((el) => +el)); + count += 1; // data๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด count๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๊ณ  + } + if (count === N) { + // count๊ฐ€ ์ž…๋ ฅ๋ฐ›์•„์•ผํ•˜๋Š” N์ผ๋•Œ rl.close()๋ฅผ ํ˜ธ์ถœํ•ด์ค€๋‹ค. + rl.close(); + } +}).on('close', function () { + // rl.close()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ด ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ๋“ค์–ด์˜ค๊ณ  + solution(N, info, data); // solution์„ ์‹คํ–‰ ํ•œ ํ›„ + process.exit(); // ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค. +}); diff --git a/src/grap3fruit/js/goorm/input1_3.js b/src/grap3fruit/js/goorm/input1_3.js new file mode 100644 index 0000000..9784cef --- /dev/null +++ b/src/grap3fruit/js/goorm/input1_3.js @@ -0,0 +1,47 @@ +const solution = (N, data) => { + console.log(N); + console.log(data); +}; + +const readline = require('readline'); +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +let T = null; +let N = null; +let info = null; +let countN = 0; +let countT = 0; +let data = []; + +rl.on('line', function (line) { + if (!T) { + T = +line; + } else if (!N) { + N = +line; + } else { + data.push(line); + // data.push(line.split('').map((el) => +el)); + // data.push(line.split('').map((el) => el)); + // data.push(line.split(' ').map((el) => +el)); + countN += 1; // data๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด countN์„ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๊ณ  + } + if (countN === N) { + // N๋งŒํผ data๋ฅผ ์ž˜ ์ž…๋ ฅ ๋ฐ›์•˜์œผ๋ฉด + solution(N, data); // solution์„ ํ˜ธ์ถœํ•˜๊ณ  + N = null; // T, countT๋ฅผ ์ œ์™ธํ•œ ๊ฐ’๋“ค์„ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค. + info = null; + countN = 0; + data = []; + + countT += 1; // ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ํ•˜๋‚˜๋ฅผ ํ†ต๊ณผํ–ˆ์œผ๋‹ˆ countT๋ฅผ 1 ์˜ฌ๋ ค์ค€๋‹ค. + } + if (countT === T) { + // ์ž…๋ ฅ๋ฐ›์€ T ๋งŒํผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ๋˜๋ฉด + rl.close(); // rl.close()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  + } +}).on('close', function () { + process.exit(); // ์ข…๋ฃŒํ•œ๋‹ค. +}); diff --git a/src/grap3fruit/js/goorm/input2.js b/src/grap3fruit/js/goorm/input2.js new file mode 100644 index 0000000..e52121d --- /dev/null +++ b/src/grap3fruit/js/goorm/input2.js @@ -0,0 +1,31 @@ +const solution = (N, data) => { + console.log(N); + console.log(data); +}; + +const readline = require('readline'); + +(async () => { + let rl = readline.createInterface({ input: process.stdin }); + let N = null; + let count = 0; + const data = []; + + for await (const line of rl) { + if (!N) { + N = +line; + } else { + data.push(line); // 1 2 3 4 5 -> ['1 2 3 4 5'] + // data.push(line.split(' ').map((el) => +el)); // 1 2 3 4 5 -> [1,2,3,4,5] + // data.push(line.split('').map((el) => el)); // 12345 -> ['1','2','3','4','5'] + // data.push(line.split('').map((el) => +el)); // 12345 -> [1,2,3,4,5] + count += 1; + } + if (N === count) { + rl.close(); + } + } + + solution(N, data); + process.exit(); +})(); diff --git a/src/grap3fruit/js/input.md b/src/grap3fruit/js/input.md new file mode 100644 index 0000000..e9036a9 --- /dev/null +++ b/src/grap3fruit/js/input.md @@ -0,0 +1 @@ +[๊ตฌ๋ฆ„(goorm), ๋ฐฑ์ค€(BOJ) ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ JavaScript๋กœ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฐฉ๋ฒ• ์ •๋ฆฌ](https://velog.io/@grap3fruit/๊ตฌ๋ฆ„goorm-์ฝ”ํ…Œ-javascript-๋กœ-์ž…๋ ฅ๊ฐ’-๋ฐ›๋Š”-๋ฐฉ๋ฒ•) ๋ธ”๋กœ๊ทธ ๊ธ€ ์ž‘์„ฑ diff --git a/src/grap3fruit/js/programmers/12904.js b/src/grap3fruit/js/programmers/12904.js new file mode 100644 index 0000000..ef69dc0 --- /dev/null +++ b/src/grap3fruit/js/programmers/12904.js @@ -0,0 +1,37 @@ +const getMaxOddPalindrome = (word, idx) => { + let max = 0; + for (let i = 0; i < word.length / 2; i++) { + if (word[idx - i] !== word[idx + i]) { + break; + } + max = i * 2 + 1; + } + return max; +}; + +const getMaxEvenPalindrome = (word, idx) => { + let max = 0; + if (idx < word.length - 1 && word[idx] === word[idx + 1]) { + for (let i = 0; i < word.length / 2; i++) { + if (word[idx - i] !== word[idx + i + 1]) { + break; + } + max = i * 2 + 2; + } + } + return max; +}; + +const solution = (s) => { + let sArr = s.split(''); + let answer = 0; + + for (let i = 0; i < sArr.length; i++) { + answer = Math.max(answer, getMaxOddPalindrome(sArr, i), getMaxEvenPalindrome(sArr, i)); + } + + return answer; +}; + +// solution('ccabcbaa'); +console.log(solution('baaba')); diff --git a/src/grap3fruit/js/programmers/12904.md b/src/grap3fruit/js/programmers/12904.md new file mode 100644 index 0000000..3638877 --- /dev/null +++ b/src/grap3fruit/js/programmers/12904.md @@ -0,0 +1,72 @@ +# 12904 ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ - ์„ฑ๊ณต + +## ์•„์ด๋””์–ด ๊ตฌํ˜„ + +์ฒซ๋ฒˆ์งธ ํ’€์ด + +``` +const checkPD = (word) => { + const wordLength = word.length; + + for (let i = 0; i < wordLength / 2; i++) { + if (word[i] !== word[wordLength - i - 1]) { + return false; + } + } + return true; +}; + +const solution = (s) => { + sArr = s.split(''); + answer = 0; + + sArr.reduce((accumulator, currentValue, currentIndex, array) => { + console.log(accumulator); + console.log(accumulator.join('')); + if (accumulator.length > 0 && checkPD(accumulator.join(''))) { + console.log(`${currentIndex}์—์„œ ํŽ ๋ฆฐ๋“œ๋กฌ์ž…๋‹ˆ๋‹ค`); + answer = currentIndex; + } + + return [...accumulator, currentValue]; + }, []); + console.log(sArr); + + if (checkPD(sArr.join(''))) { + // console.log(`${sArr.length}์—์„œ ํŽ ๋ฆฐ๋“œ๋กฌ์ž…๋‹ˆ๋‹ค`); + answer = sArr.length; + } + + console.log(answer); + return answer; +}; + +solution('abcabcdcbae'); +``` + +reduce์จ์„œ ๋ฉ‹์ง€๊ฒŒ ํ’€์–ด๋ณด๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, + +ํŒฐ๋ฆฐ๋“œ๋กฌ์ด ์ค‘๊ฐ„์— ์˜ค๋Š” ๊ฒฝ์šฐ ๋ชป์ฐพ๋Š”๋‹ค. ํ•ญ์ƒ ์•ž์—์„œ ๋ถ™์—ฌ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ ใ…  + +ํ…Œ์ผ€ `abcabcdcbae` ์—ฌ๊ธฐ์— ๊ฑธ๋ฆผ +`adcbbbbca` ์ด๊ฒƒ๋„ ์•ˆ๋ ๋“ฏ. + +--- + +ํ•œ๊ฐœ์งœ๋ฆฌ์ผ๋•Œ ์ซ™ ์ฐพ๊ณ , + +๋‘๊ฐœ์งœ๋ฆฌ์ผ๋•Œ ์ซ™ ์ฐพ๊ณ  + +ํ•ด์•ผ๊ฒ ๋Š”๊ฑธ. + +๊ทผ๋ฐ ์ด๋Ÿฌ๋ฉด ํšจ์œจ์„ฑ ํ†ต๊ณผ ์•ˆ๋ ๊ฑฐ๊ฐ™์€๋ฐ. + +์œ„์— ๋А๋‚Œ์œผ๋กœ ํ•˜๋ ค๋ฉด, ํฐ๊ฑฐ๋ถ€ํ„ฐ ์ฐพ์ž. ์ž‘์€๊ฑด ๋ฌด์กฐ๊ฑด ํฐ๊ฑฐ๊นŒ์ง€ ๊ฐ€์•ผํ•˜์ง€๋งŒ ํฐ๊ฑฐ๋Š” ๋˜๋ฉด ๋ฐ”๋กœ ๋๋‚ด๋ฉด ๋œ๋‹ค. + +--- + +์œ„์—๊บผ๋Š” ์•„๋‹Œ๊ฒƒ ๊ฐ™์•„ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๋– ์˜ค๋ฆ„. + +ํ•˜๋‚˜์”ฉ ๊ฐ€๋ฉด์„œ ๋„“ํ˜€๋ณด๊ธฐ. ์ตœ๋Œ€ํ•œ ๋„“ํžŒ max ๋ฆฌํ„ด. << ์ด ๋ฐฉ๋ฒ•. + +์•„์ด๋””์–ด ์‹ธ์›€์ด์—ˆ๋‹ค. ๋ชป๋– ์˜ฌ๋ ธ์œผ๋ฉด ์œผ์œผ.. diff --git a/src/grap3fruit/js/programmers/12981.js b/src/grap3fruit/js/programmers/12981.js new file mode 100644 index 0000000..57214da --- /dev/null +++ b/src/grap3fruit/js/programmers/12981.js @@ -0,0 +1,38 @@ +const getResult = (idx, n) => { + return [(idx % n) + 1, Math.ceil((idx + 1) / n)]; +}; + +const check = (lastWord, n, word, idx, visited) => { + if (visited.get(word)) { + return getResult(idx, n); + } + if (idx > 0) { + if (lastWord[lastWord.length - 1] !== word[0]) { + return getResult(idx, n); + } + } + return null; +}; + +function solution(n, words) { + let answer = null; + const visited = new Map(); + + words.forEach((word, idx) => { + if (!answer) { + answer = check(words[idx - 1], n, word, idx, visited); + visited.set(word, true); + } + }); + if (!answer) { + answer = [0, 0]; + } + return answer; +} + +const n = 2; +const words = ['hello', 'two']; +// const words = ['hello', 'one', 'even', 'never', 'now', 'world', 'draw']; +// const words = ['tank', 'kick', 'know', 'wheel', 'land', 'dream', 'mother', 'robot', 'tank']; + +console.log(solution(n, words)); diff --git a/src/grap3fruit/js/programmers/12981.md b/src/grap3fruit/js/programmers/12981.md new file mode 100644 index 0000000..a7d413a --- /dev/null +++ b/src/grap3fruit/js/programmers/12981.md @@ -0,0 +1,11 @@ +# 12981 ์˜์–ด ๋๋ง์ž‡๊ธฐ - ์„ฑ๊ณต + +## ์•„์ด๋””์–ด ๊ตฌํ˜„ + +๋‹จ์ˆœ ๊ตฌํ˜„ ๋ฌธ์ œ + +words๋ฅผ ๋Œ๋ฉด์„œ ์กฐ๊ฑด์— ๋งž๋Š”๊ฒƒ ๋ฆฌํ„ด ํ•ด์ฃผ๋ฉด ๋จ. + +[๋ฒˆํ˜ธ, ์ฐจ๋ก€]๋ฅผ ์ž˜ ์ถœ๋ ฅํ•˜๋Š”๊ฒŒ ๊นŒ๋‹ค๋กœ์› ์Œ. + +์ฐจ๋ก€๋Š” ํ•ญ์ƒ ์˜ฌ๋ฆผ์œผ๋กœ ํ•ด์ฃผ๋ฉด ๋งž๊ฒŒ ๋œ๋‹ค. diff --git a/src/grap3fruit/js/programmers/42578.js b/src/grap3fruit/js/programmers/42578.js new file mode 100644 index 0000000..3ec1378 --- /dev/null +++ b/src/grap3fruit/js/programmers/42578.js @@ -0,0 +1,26 @@ +function solution(clothes) { + let answer = 1; + const data = {}; + + clothes.forEach((cloth) => { + if (!data[cloth[1]]) { + return (data[cloth[1]] = [cloth[0]]); + } + data[cloth[1]].push(cloth[0]); + }); + + for (const el in data) { + answer *= data[el].length + 1; + } + answer -= 1; + + return answer; +} + +const clothes = [ + ['yellow_hat', 'headgear'], + ['blue_sunglasses', 'eyewear'], + ['green_turban', 'headgear'], +]; + +console.log(solution(clothes)); diff --git a/src/grap3fruit/js/programmers/42578.md b/src/grap3fruit/js/programmers/42578.md new file mode 100644 index 0000000..18702d0 --- /dev/null +++ b/src/grap3fruit/js/programmers/42578.md @@ -0,0 +1,9 @@ +# 42578 ์œ„์žฅ - ์„ฑ๊ณต + +## ์•„์ด๋””์–ด ๊ตฌํ˜„ + +์ด ๋ฌธ์ œ๊ฐ€ ์™œ ํ•ด์‹œ์ธ๊ฐ€? ๋”•์…”๋„ˆ๋ฆฌ ์•„๋‹Œ๊ฐ€? ํ–ˆ๋”๋‹ˆ + +ํ•ด์‹œ๋งต === ๋”•์…”๋„ˆ๋ฆฌ ๋„ค์š”. ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ์ธ๋ฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ๋ถˆ๋ฆฌ๋Š”. + +[ํ‚ค๊ธฐ๋ฐ˜์˜ ์ปฌ๋ ‰์…˜](https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Keyed_collections#Maps) ์ฐธ๊ณ ํ•ด์„œ, map ์จ์„œ๋„ ๊ตฌํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค diff --git a/src/grap3fruit/js/programmers/42578_2.js b/src/grap3fruit/js/programmers/42578_2.js new file mode 100644 index 0000000..f7b369c --- /dev/null +++ b/src/grap3fruit/js/programmers/42578_2.js @@ -0,0 +1,29 @@ +function solution(clothes) { + let answer = 1; + console.log(clothes); + + const map = new Map(); + + clothes.forEach((cloth) => { + if (!map.get(cloth[1])) { + return map.set(cloth[1], [cloth[0]]); + } + + map.get(cloth[1]).push(cloth[0]); + }); + + for (let key of map.keys()) { + answer *= map.get(key).length + 1; + } + answer -= 1; + + return answer; +} + +const clothes = [ + ['yellow_hat', 'headgear'], + ['blue_sunglasses', 'eyewear'], + ['green_turban', 'headgear'], +]; + +console.log(solution(clothes)); diff --git a/src/grap3fruit/js/programmers/43162.js b/src/grap3fruit/js/programmers/43162.js new file mode 100644 index 0000000..0affc25 --- /dev/null +++ b/src/grap3fruit/js/programmers/43162.js @@ -0,0 +1,49 @@ +const bfs = (computers, root) => { + const visited = [root]; + let q = [computers[root]]; + + while (q.length > 0) { + let item = q.shift(); + + item.forEach((el, idx) => { + if (el === 1 && !visited.includes(idx)) { + q.push(computers[idx]); + visited.push(idx); + } + }); + } + + return visited; +}; + +function solution(n, computers) { + let answer = 0; + const visited = []; + + computers.forEach((_, idx) => { + const visitFlag = visited.some((el) => el.includes(idx)); + + if (!visitFlag) { + const newVisited = bfs(computers, idx); + visited.push(newVisited); + } + }); + + console.log(visited.length); + answer = visited.length; + return answer; +} + +const n = 3; +const computers = [ + [1, 1, 0], + [1, 1, 0], + [0, 0, 1], +]; +// const computers = [ +// [1, 1, 0], +// [1, 1, 1], +// [0, 1, 1], +// ]; + +solution(n, computers); diff --git a/src/grap3fruit/js/programmers/43162.md b/src/grap3fruit/js/programmers/43162.md new file mode 100644 index 0000000..107a9be --- /dev/null +++ b/src/grap3fruit/js/programmers/43162.md @@ -0,0 +1,11 @@ +# 43162 ๋„คํŠธ์›Œํฌ - ์„ฑ๊ณต + +## BFS + +bfs์—์„œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ํ•„์š”๋Š” ์—†๊ณ , ์ง€๋‚˜๊ฐ„ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ visited์— ๋‹ด์•„์„œ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์ด๊ฑธ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. + +๊ฐ๊ฐ์˜ ์ปดํ“จํ„ฐ๊ฐ€ root์ผ๋•Œ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌํ•˜๊ณ  ๊ฒน์น˜์ง€ ์•Š๋Š” ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. + +๊ฒน์น˜์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ์œ„ํ•ด bfs๋กœ root๋ฅผ ๋„ฃ๊ธฐ ์ „, network๋ฅผ ๋ชจ๋‘ ์ฒดํฌํ•ด์„œ ๊ฒน์น˜๋Š” root๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ด๋ฏธ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ pass ํ–ˆ๋‹ค. + +์œ„ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๋ชจ๋“  network๋ฅผ ๊ตฌํ•œ ํ›„ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ฉด ๋. diff --git a/src/grap3fruit/js/programmers/64061.js b/src/grap3fruit/js/programmers/64061.js new file mode 100644 index 0000000..246ddd8 --- /dev/null +++ b/src/grap3fruit/js/programmers/64061.js @@ -0,0 +1,44 @@ +const board = [ + [0, 0, 0, 0, 0], + [0, 0, 1, 0, 3], + [0, 2, 5, 0, 1], + [4, 2, 4, 4, 2], + [3, 5, 1, 3, 1], +]; +const moves = [1, 5, 3, 5, 1, 2, 1, 4]; + +function solution(board, moves) { + const result = []; + let answer = 0; + + moves.reduce((acc, move) => { + for (let i = 0; i < board.length; i++) { + if (board[i][move - 1] === 0) { + continue; + } + + if (acc.length > 0) { + const prev = acc.pop(); + + if (prev === board[i][move - 1]) { + board[i][move - 1] = 0; + answer += 2; + return acc; + } + + acc.push(prev); + } + + acc.push(board[i][move - 1]); + board[i][move - 1] = 0; + return acc; + } + return acc; + }, []); + + console.log(board); + console.log(result); + return answer; +} + +console.log(solution(board, moves)); diff --git a/src/grap3fruit/js/programmers/64061.md b/src/grap3fruit/js/programmers/64061.md new file mode 100644 index 0000000..9229de2 --- /dev/null +++ b/src/grap3fruit/js/programmers/64061.md @@ -0,0 +1,25 @@ +# 64061 ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„ - ์„ฑ๊ณต + +## ๊ตฌํ˜„ + +moves๋Š” board์˜ x์ถ•์— ์ ‘๊ทผํ•˜๋Š”๋ฐ, + +์ด๊ฑธ ์ด์ œ result stack์— ๋„ฃ๊ณ , + +stack์— ๋„ฃ์„๋•Œ pop์„ ํ•œ๋ฒˆ ํ•ด์ค˜์„œ + +pop๋œ ์š”์†Œ๊ฐ€ ํ˜„์žฌ ๋„ฃ๋Š”๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฉด pass ํ•˜๊ณ  answer์— +2 ํ•ด์คŒ. + +๋™์ผ ํ•˜์ง€ ์•Š์œผ๋ฉด pop ํ–ˆ๋˜๊ฑฐ ๋‹ค์‹œ ๋„ฃ๊ณ , ํ˜„์žฌ ์š”์†Œ ๋„ฃ์–ด์คŒ. + +--- + +move.forEach๋Š” reduce๋กœ accumulator์— answer ๋„ฃ์–ด์„œ ๊ฐ€๋Šฅํ• ๊ฒƒ ๊ฐ™๊ณ . + +borad[i][move] ์ด๊ฑฐ๋Š” ๊ณ ์ฐจํ•จ์ˆ˜๋กœ ๋ ๊นŒ? + +์™ธ๋ถ€์— flag ์„ ์–ธํ•ด๋†“๊ณ , ํ•œ๋ฒˆ 0์œผ๋กœ ๋ฐ”๋€Œ๋ฉด flag ๊ฐ’ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋ ๊ฑฐ๊ฐ™๊ธดํ•œ๋ฐ. ์˜๋ฏธ๊ฐ€ ์žˆ๋‚˜? for๋ฌธ์ด ๋” ๋น ๋ฅผ๊ฑฐ๊ฐ™์€๋ฐ. + +์†๋„ vs ๊ฐ€๋…์„ฑ? + +> ๊ตฌํ˜„ํ•ด ๋ณด๋‹ˆ ๊ฐ€๋…์„ฑ์ด ์ข‹์€๊ฒƒ ๊ฐ™์ง€๋„ ์•Š๋‹ค.. diff --git a/src/grap3fruit/js/programmers/64061_2.js b/src/grap3fruit/js/programmers/64061_2.js new file mode 100644 index 0000000..1ac2e7f --- /dev/null +++ b/src/grap3fruit/js/programmers/64061_2.js @@ -0,0 +1,40 @@ +const board = [ + [0, 0, 0, 0, 0], + [0, 0, 1, 0, 3], + [0, 2, 5, 0, 1], + [4, 2, 4, 4, 2], + [3, 5, 1, 3, 1], +]; +const moves = [1, 5, 3, 5, 1, 2, 1, 4]; + +const result = []; +let answer = 0; + +moves.forEach((move) => { + let changedFlag = false; + + board.forEach((el) => { + if (el[move - 1] !== 0 && changedFlag === false) { + if (result.length > 0) { + const prev = result.pop(); + + if (prev === el[move - 1]) { + el[move - 1] = 0; + answer += 2; + changedFlag = true; + } else { + result.push(prev); + } + } + if (changedFlag === false) { + result.push(el[move - 1]); + el[move - 1] = 0; + changedFlag = true; + } + } + }); +}); + +console.log(board); +console.log(result); +console.log(answer); diff --git a/src/grap3fruit/js/programmers/64065.js b/src/grap3fruit/js/programmers/64065.js new file mode 100644 index 0000000..e22cf06 --- /dev/null +++ b/src/grap3fruit/js/programmers/64065.js @@ -0,0 +1,58 @@ +const getSubtractedArr = (arrA, arrB) => arrB.filter((el) => !arrA.includes(el)); + +const getArrFromStr = (s) => { + const arr = s.split(''); + + let parent_arr = []; + let child_arr = []; + + for (let i = 1; i < arr.length - 1; i++) { + if (arr[i] === '}') { + parent_arr.push(child_arr); + child_arr = []; + } + + if (+arr[i] >= 0) { + if (+arr[i - 1] >= 0) { + const num = child_arr.pop(); + child_arr.push(Number(num + arr[i])); + } else { + child_arr.push(+arr[i]); + } + } + } + return parent_arr; +}; + +function solution(s) { + let answer = []; + const arr = getArrFromStr(s); + + for (let i = 0; i < arr.length; i++) { + for (let j = 0; j < arr.length; j++) { + if (arr[j].length === i + 1) { + const [temp] = getSubtractedArr(answer, arr[j]); + answer.push(temp); + break; + } + } + } + + return answer; +} + +// console.log(solution('{{2},{2,1},{2,1,3},{2,1,3,4}}')); +// console.log(solution('{{1,2,3},{2,1},{1,2,4,3},{2}}')); +// console.log(solution('{{20,111},{111}}')); +// console.log(solution('{{123}}')); +// console.log(solution('{{4,2,3},{3},{2,3,4,1},{2,3}}')); + +const setA = new Set(); +const setB = new Set(); +setA.add(1); +setA.add(2); +setB.add(3); +setB.add(2); + +console.log(setA, setB); +console.log(setA - setB); diff --git a/src/grap3fruit/js/programmers/64065.md b/src/grap3fruit/js/programmers/64065.md new file mode 100644 index 0000000..f4cf3d6 --- /dev/null +++ b/src/grap3fruit/js/programmers/64065.md @@ -0,0 +1,44 @@ +# 64065 2019 ์นด์นด์˜ค ๊ฒจ์šธ์ธํ„ด ํŠœํ”Œ - ์„ฑ๊ณต + +## ๊ตฌํ˜„ + +์ง‘ํ•ฉ ๊ธธ์ด์— ๋”ฐ๋ผ์„œ + +๊ฐ€์žฅ ์ž‘์€๊ฒŒ ๋งจ ์•ž์ด๊ณ  + +๊ทธ ๋‹ค์Œ ๊ธธ์ด์— ์ถ”๊ฐ€๋œ๊ฒŒ ๋‹ค์Œ๊บผ + +์ด๋Ÿฐ์‹์œผ๋กœ result ์ฑ„์šฐ๋ฉด ๋จ. + +python์— set ์“ฐ๋ฉด ์—„์ฒญ ์‰ฌ์› ์„๋“ฏ ใ…‹ใ…‹ + +--- + +1. {} ๋ฌธ์ž์—ด์„ [] ๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ๋‹ค. + +``` +๋ถ€๋ชจ arr, ์ž์‹ arr๋ฅผ ๋‘”๋‹ค. +์ด์ฐจ์› ๋ฐฐ์—ด์˜ ๋ฐ”๊นฅ์„ ๋ถ€๋ชจ arr. +๋‚ด๋ถ€ el๋“ค์ด ์ž์‹ arr. + +์ „์ฒด string ๊ธธ์ด๋งŒํผ loop๋ฅผ ๋Œ๋ฉด์„œ + ๋งŒ์•ฝ '}' ๋ฉด + ๋ถ€๋ชจ์— ํ˜„์žฌ๊นŒ์ง€ ์ž์‹ arr ์ถ”๊ฐ€. + ์ž์‹ arr = [] + + '}' ๊ฐ€ ์•„๋‹๋–„ + ์•ž์ด ์ˆซ์ž๋ฉด ํ•ฉ์ณ์„œ ์ž์‹arr์— ๋„ฃ๊ณ  + ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ๋„ฃ์Œ. + + +``` + +2. ๋ฐฐ์—ด ๊ฐฏ์ˆ˜๋งŒํผ ์ด์ค‘ํฌ๋ฌธ ๋ˆ๋‹ค. + +``` +for i = 1,2,3 ... + for j = 1,2,3 ... + ๋งŒ์•ฝ ํ˜„์žฌ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ i์ด๋ฉด, + answer์— ์ถ”๊ฐ€. + +``` diff --git a/src/grap3fruit/py/boj/1010.md b/src/grap3fruit/py/boj/1010.md new file mode 100644 index 0000000..2348a68 --- /dev/null +++ b/src/grap3fruit/py/boj/1010.md @@ -0,0 +1,11 @@ +# 1010 - ์„ฑ๊ณต + +## DP + +- nCr ์จ์„œ ํ’€์—ˆ์Œ. +- 7C3์ด๋ฉด (7*6*5)/(3*2*1)์„ ๊ณ„์‚ฐ. + +## ๋ณด์™„ + +- DP๋ฌธ์ œ์ธ๋ฐ DP๋กœ ์•ˆํ’€์—ˆ๋‹ค. ๐Ÿ˜‚ +- ๋„ํ˜ธ๋‹˜ ๋ฐฉ๋ฒ• ์ฒ˜๋Ÿผ DP๋กœ ํ’€์–ด๋ณผ ํ•„์š”๋„ ์žˆ์„๋“ฏ.. diff --git a/src/grap3fruit/py/boj/1010.py b/src/grap3fruit/py/boj/1010.py new file mode 100644 index 0000000..2de67de --- /dev/null +++ b/src/grap3fruit/py/boj/1010.py @@ -0,0 +1,25 @@ +import sys + +def get_mCn(N, M): + mom = N + mom_index = N + child = M + child_index = M + + for _ in range(M-1): + + mom = mom * (mom_index-1) + mom_index -= 1 + + while child_index > 1: + child = child * (child_index-1) + child_index -= 1 + + return(int(mom/child)) + +T = int(sys.stdin.readline()) + +for _ in range(T): + N, M = list(map(int,sys.stdin.readline().strip().split())) + print(get_mCn(M, N)) + diff --git a/src/grap3fruit/py/boj/1094.md b/src/grap3fruit/py/boj/1094.md new file mode 100644 index 0000000..b364969 --- /dev/null +++ b/src/grap3fruit/py/boj/1094.md @@ -0,0 +1,11 @@ +# 1094 - ์„ฑ๊ณต + +## ๋น„ํŠธ๋งˆ์Šคํฌ + +- ๋ฌธ์ œ ๋‚ด์šฉ๋Œ€๋กœ ํ’€๋ฉด ๋จ +- ์ผ๋‹จ current_min์„ ์ง€์šฐ๊ณ , ์ ˆ๋ฐ˜์„ ํ†ตํ•ด ๊ณ„์‚ฐ์„ ํ•˜๊ณ , +- 1-2๋ฒˆ ์กฐ๊ฑด๊นŒ์ง€ ๊ฐ€๊ฒŒ ๋˜๋ฉด ๊ทธ๋•Œ ์ ˆ๋ฐ˜์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. + +## ๋ณด์™„ + +- ๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ, ํ™œ์šฉํ•ด๋ณด๋ฉด ์ข‹์„๋“ฏ. diff --git a/src/grap3fruit/py/boj/1094.py b/src/grap3fruit/py/boj/1094.py new file mode 100644 index 0000000..67dd6f5 --- /dev/null +++ b/src/grap3fruit/py/boj/1094.py @@ -0,0 +1,26 @@ +import sys + +target = int(sys.stdin.readline()) + +datas = [64] + +def calc(datas): + if sum(datas) > target: + current_min = min(datas) + datas.remove(current_min) + datas.append(current_min/2) + + if sum(datas) == target: + return len(datas) + + if sum(datas) > target: + return calc(datas) + + if sum(datas) < target: + datas.append(current_min/2) + return calc(datas) + + if sum(datas) == target: + return len(datas) + +print(calc(datas)) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/11047.md b/src/grap3fruit/py/boj/11047.md new file mode 100644 index 0000000..27c915b --- /dev/null +++ b/src/grap3fruit/py/boj/11047.md @@ -0,0 +1,8 @@ +# 11047 - ์„ฑ๊ณต + +## ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +- ๋™์ „์˜ ๊ฐ€์น˜๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋‹ค์‹œ ์ •๋ ฌ ํ•œ ํ›„์—, +- ํฐ ๋™์ „๋ถ€ํ„ฐ ์ฃผ์–ด์ง„ K์›์„ ๋‚˜๋ˆ„์–ด ๊ฐ„๋‹ค. +- ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด ๊ทธ๋งŒํผ ๋นผ๊ณ  ์ง„ํ–‰ํ•œ๋‹ค. +- ๋ชจ๋“  ์ฝ”์ธ์— ๋Œ€ํ•ด์„œ ์ง„ํ–‰ ํ•˜๊ณ  ๋‚˜๋ฉด ๋‚˜๋ˆ ์ง„ ํšŸ์ˆ˜ ์ถœ๋ ฅ. diff --git a/src/grap3fruit/py/boj/11047.py b/src/grap3fruit/py/boj/11047.py new file mode 100644 index 0000000..fdb1a82 --- /dev/null +++ b/src/grap3fruit/py/boj/11047.py @@ -0,0 +1,20 @@ +import sys + +N, K = list(map(int,sys.stdin.readline().strip().split())) + +coins = [] +for i in range(N): + coins.append(int(sys.stdin.readline())) + +coins.sort(reverse=True) +print(coins) + +count = 0 +for coin in coins: + value = int(K/coin) + + if value >= 1: + count += value + K = K-(value*coin) + +print(count) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/11286.py b/src/grap3fruit/py/boj/11286.py new file mode 100644 index 0000000..35748d4 --- /dev/null +++ b/src/grap3fruit/py/boj/11286.py @@ -0,0 +1,39 @@ +import heapq +import sys + +# n = 18 +# x = [1, +# -1, +# 0, +# 0, +# 0, +# 1, +# 1, +# -1, +# -1, +# 2, +# -2, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0, +# 0] + +n = int(sys.stdin.readline().strip()) +heap = [] +x = [] +for i in range(0, n): + x.append(int(sys.stdin.readline().strip())) + +for i in range(0,n): + if x[i] == 0: + if len(heap) == 0: + print(0) + continue + + print(heapq.heappop(heap)[1]) + continue + if x[i] != 0: + heapq.heappush(heap,(abs(x[i]),x[i])) diff --git a/src/grap3fruit/py/boj/11399.md b/src/grap3fruit/py/boj/11399.md new file mode 100644 index 0000000..541061b --- /dev/null +++ b/src/grap3fruit/py/boj/11399.md @@ -0,0 +1,5 @@ +# 11399 - ์„ฑ๊ณต + +## ๊ตฌํ˜„ + +sort ์ดํ›„ ์•ž์—์„œ๋ถ€ํ„ฐ ๋”ํ•œ ๋ˆ„์‚ฐ๊ธฐ์˜ ํ•ฉ์„ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค. diff --git a/src/grap3fruit/py/boj/11399.py b/src/grap3fruit/py/boj/11399.py new file mode 100644 index 0000000..c9b4792 --- /dev/null +++ b/src/grap3fruit/py/boj/11399.py @@ -0,0 +1,17 @@ +import sys + +# n = int(sys.stdin.readline()) +# arr = list(map(int,sys.stdin.readline().strip().split())) + +arr = [3,1,4,3,2] + +arr.sort() +print(arr) + +acc = 0 +new_arr = [] +for el in arr: + acc += el + new_arr.append(acc) + +print(sum(new_arr)) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/1149.md b/src/grap3fruit/py/boj/1149.md new file mode 100644 index 0000000..e3e69f9 --- /dev/null +++ b/src/grap3fruit/py/boj/1149.md @@ -0,0 +1,135 @@ +# 1149 - ์‹คํŒจ + +## DP + +```python +def get_min(datum): + min = [datum[0],'R'] + if datum[1] < min[0]: + min = [datum[1],'G'] + if datum[2] < min[0]: + min = [datum[2],'B'] + return min +``` + +[value, color] ํ˜•ํƒœ๋กœ ์ตœ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ + +ex) get_min(1,2,3) โ†’ [1,'R'] + +```python +def get_min_dp_n_1(dp_N_1, a_N): + result = [] + if dp_N_1[1] == 'R': + if a_N[1] < a_N[2] : + return [dp_N_1[0] + a_N[1],'G'] + return [dp_N_1[0] + a_N[2],'B'] + + elif dp_N_1[1] == 'G': + if a_N[0] < a_N[2] : + return [dp_N_1[0] + a_N[0],'R'] + return [dp_N_1[0] + a_N[2],'B'] + + elif dp_N_1[1] == 'B': + if a_N[0] < a_N[1] : + return [dp_N_1[0] + a_N[0],'R'] + return [dp_N_1[0] + a_N[1],'G'] +``` + +์‹ : dp[n] = dp[n-1] + a[n] + +dp[n-1]์˜ ์ƒ‰๊ณผ ๋‹ค๋ฅธ a[n]๋ฒˆ์งธ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ค‘์—์„œ, ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•จ. + +[value, color] ํ˜•ํƒœ๋กœ ์ตœ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜ + +```python +def get_min_n_1_n_2(color, a_N_1, a_N): + result = [] + min = 2001 + if color == 'R': + if a_N_1[1] + a_N[0] < min : # G + R + min = a_N_1[1] + a_N[0] + result = [min, 'R'] + if a_N_1[1] + a_N[2] < min : # G + B + min = a_N_1[1] + a_N[2] + result = [min, 'B'] + if a_N_1[2] + a_N[0] < min : # B + R + min = a_N_1[2] + a_N[0] + result = [min, 'R'] + if a_N_1[2] + a_N[1] < min : # B + G + min = a_N_1[2] + a_N[1] + result = [min, 'G'] + + min = 2001 + if color == 'G': + if a_N_1[0] + a_N[1] < min : # R + G + min = a_N_1[0] + a_N[1] + result = [min, 'G'] + if a_N_1[0] + a_N[2] < min : # R + B + min = a_N_1[0] + a_N[2] + result = [min, 'B'] + if a_N_1[2] + a_N[1] < min : # B + G + min = a_N_1[2] + a_N[1] + result = [min, 'G'] + if a_N_1[2] + a_N[0] < min : # B + R + min = a_N_1[2] + a_N[0] + result = [min, 'R'] + + min = 2001 + if color == 'B': + if a_N_1[0] + a_N[1] < min : # R + G + min = a_N_1[0] + a_N[1] + result = [min, 'G'] + if a_N_1[0] + a_N[2] < min : # R + B + min = a_N_1[0] + a_N[2] + result = [min, 'B'] + if a_N_1[1] + a_N[0] < min : # G + R + min = a_N_1[1] + a_N[0] + result = [min, 'R'] + if a_N_1[1] + a_N[2] < min : # G + B + min = a_N_1[1] + a_N[2] + result = [min, 'B'] + + return result +``` + +์‹ : dp[n] = dp[n-2] + a[n-1] + a[n] + +dp[n-2]๋ฒˆ์งธ์˜ ์ƒ‰๊ณผ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์˜ ์ˆ˜ a[n-1]์„ ๋”ํ•˜๊ณ , a[n-1]์˜ ์ƒ‰๊ณผ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์˜ ์ˆ˜ a[n]์„ ๋”ํ•ด dp[n]์„ ๊ตฌํ•จ. + +์•ž์˜ 2,3๋ฒˆ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋‚˜์˜จ ๊ฐ’์˜ ์ตœ์†Œ๊ฐ’์„ dp[n]์œผ๋กœ ํ•จ. + +--- + +## ์•ˆํ’€๋ฆผ ใ… ใ…  + +### ๋ฐ˜๋ก€ 1 + +```python +// ์ž…๋ ฅ +3 +1 9 2 +1 9 9 +9 1 9 + +// ์ •๋‹ต +4 +``` + +dp[1] ๋ณด์™„ํ•ด์ค˜์„œ ํ•ด๊ฒฐ + +### ๋ฐ˜๋ก€ 2 + +```python +3 +1 2 3 +1 2 3 +100 1 100 + +# ์ •๋‹ต +4 + +# ์ถœ๋ ฅ +5 +``` + +> ๋‚˜์ค‘์— ์„ฑ๊ณต์‹œ์ผœ ์—…๋ฐ์ดํŠธ ๊ผญ ํ•˜์ž. diff --git a/src/grap3fruit/py/boj/1149.py b/src/grap3fruit/py/boj/1149.py new file mode 100644 index 0000000..ca49869 --- /dev/null +++ b/src/grap3fruit/py/boj/1149.py @@ -0,0 +1,120 @@ +import sys + +N = int(sys.stdin.readline()) + +data = [] +for _ in range(N): + RGB = list(map(int,sys.stdin.readline().strip().split())) + data.append(RGB) + +print(data) + +def get_min(datum): + min = [datum[0],'R'] + if datum[1] < min[0]: + min = [datum[1],'G'] + if datum[2] < min[0]: + min = [datum[2],'B'] + return min + +def get_min_dp_n_1(dp_N_1, a_N): + result = [] + if dp_N_1[1] == 'R': + if a_N[1] < a_N[2] : + return [dp_N_1[0] + a_N[1],'G'] + return [dp_N_1[0] + a_N[2],'B'] + + elif dp_N_1[1] == 'G': + if a_N[0] < a_N[2] : + return [dp_N_1[0] + a_N[0],'R'] + return [dp_N_1[0] + a_N[2],'B'] + + elif dp_N_1[1] == 'B': + if a_N[0] < a_N[1] : + return [dp_N_1[0] + a_N[0],'R'] + return [dp_N_1[0] + a_N[1],'G'] + +def get_min_n_1_n_2(color, a_N_1, a_N): + result = [] + min = 2001 + if color == 'R': + if a_N_1[1] + a_N[0] < min : # G + R + min = a_N_1[1] + a_N[0] + result = [min, 'R'] + if a_N_1[1] + a_N[2] < min : # G + B + min = a_N_1[1] + a_N[2] + result = [min, 'B'] + if a_N_1[2] + a_N[0] < min : # B + R + min = a_N_1[2] + a_N[0] + result = [min, 'R'] + if a_N_1[2] + a_N[1] < min : # B + G + min = a_N_1[2] + a_N[1] + result = [min, 'G'] + + min = 2001 + if color == 'G': + if a_N_1[0] + a_N[1] < min : # R + G + min = a_N_1[0] + a_N[1] + result = [min, 'G'] + if a_N_1[0] + a_N[2] < min : # R + B + min = a_N_1[0] + a_N[2] + result = [min, 'B'] + if a_N_1[2] + a_N[1] < min : # B + G + min = a_N_1[2] + a_N[1] + result = [min, 'G'] + if a_N_1[2] + a_N[0] < min : # B + R + min = a_N_1[2] + a_N[0] + result = [min, 'R'] + + min = 2001 + if color == 'B': + if a_N_1[0] + a_N[1] < min : # R + G + min = a_N_1[0] + a_N[1] + result = [min, 'G'] + if a_N_1[0] + a_N[2] < min : # R + B + min = a_N_1[0] + a_N[2] + result = [min, 'B'] + if a_N_1[1] + a_N[0] < min : # G + R + min = a_N_1[1] + a_N[0] + result = [min, 'R'] + if a_N_1[1] + a_N[2] < min : # G + B + min = a_N_1[1] + a_N[2] + result = [min, 'B'] + + return result + +# print(get_min_n_1_n_2('R', [26,40,83],[49,60,57])) + + +def get_min_dp_n_2(dp_N_2, a_N_1, a_N): + result = [] + + result = get_min_n_1_n_2(dp_N_2[1], a_N_1, a_N) + result[0] += dp_N_2[0] + print("n-2",result) + return result + +# print(get_min_n_1([26,'R'], [49,60,70])) + +def calc(): + dp = [0]*1001 + + dp[0] = get_min(data[0]) + if N == 1: + return dp[0][0] + + dp[1] = min(get_min_dp_n_1([data[0][0],'R'], data[1]),get_min_dp_n_1([data[0][1],'G'], data[1]),get_min_dp_n_1([data[0][2],'B'], data[1])) + if N == 2: + return dp[1][0] + + for i in range(2, N): + test1 = get_min_dp_n_2(dp[i-2], data[i-1], data[i]) + test2 = get_min_dp_n_1(dp[i-1], data[i]) + print(test1, test2) + dp[i] = min(test1, test2) + # dp[i] = min(get_min_dp_n_2(dp[i-2], data[i-1], data[i]), get_min_dp_n_1(dp[i-1], data[i])) + + print(dp) + return dp[N-1][0] + +print(calc()) diff --git a/src/grap3fruit/py/boj/11497.md b/src/grap3fruit/py/boj/11497.md new file mode 100644 index 0000000..34bf471 --- /dev/null +++ b/src/grap3fruit/py/boj/11497.md @@ -0,0 +1,12 @@ +# 11497 - ์„ฑ๊ณต + +## ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +- ๊ฐ€์šด๋ฐ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋†“๊ณ , ๊ทธ ์˜† ์ขŒ,์šฐ๋กœ ์ฐจ๋ก€์ฐจ๋ก€ ๊ทธ ๋‹ค์Œ ํฐ ์ˆ˜๋ฅผ ๋†“๋Š”๋‹ค. +- ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ์—์„œ ์–‘์˜†์˜ ์ฐจ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์™„์„ฑ๋œ๋‹ค. +- ๋ฐ˜๋Œ€๋กœ ํ•ด๋„ ๋™์ž‘๋  ๋“ฏ ํ•˜๋‹ค. +- deque ํ™œ์šฉํ•ด์„œ, ์ขŒ์šฐ๋กœ ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค. + +## ๋ณด์™„ + +- ์•„์ด๋””์–ด ์‹ธ์›€์ธ๋ฐ, ์ฆ๋ช…ํ•˜๊ธฐ๋„ ๋ญ”๊ฐ€ ์–ด๋ ค์› ๊ณ . ๋” ์—ฐ์Šต๊ณผ ํ•™์Šต์ด ํ•„์š”ํ•˜๋‹ค.. diff --git a/src/grap3fruit/py/boj/11497.py b/src/grap3fruit/py/boj/11497.py new file mode 100644 index 0000000..702dd8d --- /dev/null +++ b/src/grap3fruit/py/boj/11497.py @@ -0,0 +1,27 @@ +import sys +import collections + +T = int(sys.stdin.readline()) +for i in range(T): + deq = collections.deque([]) + N = int(sys.stdin.readline()) + datas = list(map(int,sys.stdin.readline().strip().split())) + datas.sort(reverse=True) + + count = 0 + for data in datas: + if count % 2 == 0: + deq.append(data) + if count % 2 == 1: + deq.appendleft(data) + + count += 1 + + print(deq) + max_gap = 0 + for j in range(-1, N-1): + gap = abs(deq[j]-deq[j+1]) + if gap > max_gap: + max_gap = gap + + print(max_gap) diff --git a/src/grap3fruit/py/boj/11727.md b/src/grap3fruit/py/boj/11727.md new file mode 100644 index 0000000..7fec9bb --- /dev/null +++ b/src/grap3fruit/py/boj/11727.md @@ -0,0 +1,15 @@ +# 11727 - ์„ฑ๊ณต (ํžŒํŠธ) + +## DP + +![image](https://user-images.githubusercontent.com/13213473/98455510-fbf68880-21b4-11eb-953f-5612eb6bef77.png) + +์œ„ ๊ทธ๋ฆผ์—์„œ N๋ฒˆ์งธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” + +N-1๋ฒˆ์งธ์— 2x1 ์ถ”๊ฐ€ํ•ด์ค€ ๊ฒฝ์šฐ์™€, N-2๋ฒˆ์งธ์— 1x2๋ฅผ ๋‘๊ฐœ ์ถ”๊ฐ€ํ•ด์ค€ ๊ฒฝ์šฐ๋ฅผ ํ•ฉํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. + +๋”ฐ๋ผ์„œ ์‹์€ `dp[N] = dp[N-1] + dp[N-2]` + +11727๋ฒˆ ๋ฌธ์ œ๋Š” ์œ„ ๊ทธ๋ฆผ์—์„œ N-2๋ฒˆ์งธ์— 2x2๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. + +๋”ฐ๋ผ์„œ ์‹์€ `dp[N] = dp[N-1] + dp[N-2] + dp[N-2]` diff --git a/src/grap3fruit/py/boj/11727.py b/src/grap3fruit/py/boj/11727.py new file mode 100644 index 0000000..0adaa4f --- /dev/null +++ b/src/grap3fruit/py/boj/11727.py @@ -0,0 +1,21 @@ +import sys + +N = int(sys.stdin.readline()) + +dp = [0]*1002 +dp[1] = 1 +dp[2] = 3 + +index = 2 +while True: + if N == 1: + print(dp[1]) + break + + if index == N: + print(dp[N]%10007) + break + + index += 1 + dp[index] = dp[index-1] + dp[index-2] + dp[index-2] + \ No newline at end of file diff --git a/src/grap3fruit/py/boj/1254.md b/src/grap3fruit/py/boj/1254.md new file mode 100644 index 0000000..9428bf6 --- /dev/null +++ b/src/grap3fruit/py/boj/1254.md @@ -0,0 +1,45 @@ +# 1254 - ์„ฑ๊ณต + +## ํŒฐ๋ฆฐ๋“œ๋กฌ + +abbca ๋ผ๊ณ  ํ•˜๋ฉด, + +๋งˆ์ง€๋ง‰ a๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งจ ์•ž์—์„œ ๋ถ€ํ„ฐ ๋„ฃ์–ด์„œ ํŒฐ๋ฆฐ๋“œ๋กฌ ์ฒดํฌ๋ฅผ ํ•œ๋‹ค. + +``` +abbca a + +abbca ba + +abbca bba + +abbc a cbba +``` + +์ด๋ ‡๊ฒŒ ๋งจ ์•ž ์š”์†Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. + +๋’ค์—์„œ i๋ฒˆ์งธ ์ž๋ฆฌ์— data[i]๋ฅผ ๋„ฃ๊ฒŒ ๋œ๋‹ค. + +๋’ค์—์„œ i๋ฒˆ์งธ ์ž๋ฆฌ์— ์–ด๋–ป๊ฒŒ ๋„ฃ์–ด์ค„๊นŒ? + +deque ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐ + +add_string์— appendleft๋ฅผ ํ•ด์„œ + +์›๋ณธ data + add_string ํ•œ๊ฒƒ์„ ํŒฐ๋ฆฐ๋“œ๋กฌ ์ฒดํฌ ํ•ด์„œ ๋Œ๋ ค์ค€๋‹ค. + +``` +data | add_string + +abbca a + +abbca ba + +abbca bba + +abbca cbba โ†’ ํŒฐ๋ฆฐ๋“œ๋กฌ! +``` + +### ์ด์Šˆ + +- deque ์•ˆ์“ฐ๊ณ ๋„ ํ•  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์€๋ฐ,, ์ข€ ๋” ์˜ˆ์œ ๋ฐฉ๋ฒ•์œผ๋กœ? diff --git a/src/grap3fruit/py/boj/1254.py b/src/grap3fruit/py/boj/1254.py new file mode 100644 index 0000000..44d0eed --- /dev/null +++ b/src/grap3fruit/py/boj/1254.py @@ -0,0 +1,50 @@ +import sys +from collections import deque + +data = sys.stdin.readline().strip() + +def checkPD(data): + N = len(data) + + if N % 2 == 0: + if data[int(N/2)] != data[int(N/2)-1] : + return False + + for i in range(0, int(N/2)): + if data[i] != data[N-i-1] : + return False + + return True + + if N % 2 == 1: + for i in range(0, int(N/2)): + if data[i] != data[N-i-1] : + return False + + return True + +# print(checkPD(['a','b','b','c','a'])) + +# deq = deque(['a','b','c','b', 'a']) +# print(checkPD(deq)) + +def calc(data): + N = len(data) + if N == 1: + print(1) + return + + count = N + add_string = deque([]) + for i in range(0, N): + PD = deque(data) + PD.extend(add_string) + + if checkPD(PD): + print(count, PD) + return + + add_string.appendleft(data[i]) + count += 1 + +calc(data) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/12731.md b/src/grap3fruit/py/boj/12731.md new file mode 100644 index 0000000..bf51add --- /dev/null +++ b/src/grap3fruit/py/boj/12731.md @@ -0,0 +1,114 @@ +# 12731 - ์„ฑ๊ณต(ํžŒํŠธ) + +## ์‹œ๊ฐ„ ๊ณ„์‚ฐ ๋ฌธ์ œ + +### ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +์ผ๋‹จ ์‹œ โ†’ ๋ถ„์œผ๋กœ ๋ณ€๊ฒฝ + +60 \* hour + min + +main ํ•จ์ˆ˜์—์„œ ๋ถ„์œผ๋กœ ๋œ 2์ฐจ์› ๋ฐฐ์—ด ๋งŒ๋“ฌ. + +na_arr = [[660, 720], [960, 1080]] + +nb_arr = [[720, 960], [540, 660]] ..์ด๋Ÿฐ์‹ + +calc ํ•จ์ˆ˜์— (na_arr, nb_arr, T(=ํšŒ์ฐจ์‹œ๊ฐ„)) ํŒŒ๋ผ๋ฏธํ„ฐ ๋„˜๊ฒจ์ค˜์„œ, + +NA๋ฅผ ๋Œ๋ฉด์„œ NA_min - T ๋ณด๋‹ค NB_max ๊ฐ€ ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€๊ฒŒ ์žˆ์œผ๋ฉด, ํ•ด๋‹น nb๋ฅผ ์ œ๊ฑฐ. + +NB๋„ ๋˜‘๊ฐ™์ด ์ง„ํ–‰. + +์œ„ if์— ๋“ค์–ด๊ฐˆ๋•Œ count -= 1 ํ•ด์„œ na, nb ๊ฐ๊ฐ ์นด์šดํŠธ ๋ฆฌํ„ด. + +### ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค + +``` +1 +5 +1 2 +09:00 11:00 +13:00 15:00 +14:00 16:00 + +Case #1: 1 1 + +1 +5 +2 1 +13:00 15:00 +14:00 16:00 +09:00 11:00 + +Case #1: 1 1 + +1 +0 +1 2 +09:00 11:00 +11:00 12:00 +12:00 16:00 + +Case #1: 1 1 + + +1 +0 +0 3 +09:00 11:00 +11:00 12:00 +12:00 16:00 + +Case #1: 0 3 + + +1 +0 +0 3 +09:00 11:00 +11:00 12:00 +12:00 16:00 + +Case #1: 0 3 + + +1 +1 +1 2 +09:00 11:00 +11:00 12:00 +12:00 16:00 + +Case #1: 1 1 + +1 +0 +2 2 +12:00 16:00 +11:00 12:00 +16:00 18:00 +09:00 11:00 + +Case #1: 1 1 + +1 +0 +2 2 +11:00 12:00 +16:00 18:00 +12:00 16:00 +09:00 11:00 + +Case #1: 0 1 +``` + +### ์ด์Šˆ + +- ํ…Œ์ผ€ ๋งŽ์ด ๋Œ๋ ธ๋Š”๋ฐ, ํ†ต๊ณผ๊ฐ€ ์•ˆ๋œ๋‹ค ๐Ÿ˜ญ +- ๋„์—ฐ๋‹˜๊บผ ์ฐธ๊ณ ํ•ด์„œ, sort๋„ฃ์—ˆ๋”๋‹ˆ ํ†ต๊ณผ๋จ. +- sort ์•ˆํ•ด์ฃผ๋ฉด ๋Šฆ์€ ์‹œ๊ฐ„๊ป„ ๋จผ์ € ๊ฐ€์ ธ๊ฐ€๋ฒ„๋ ค์„œ ๊ผฌ์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋Š”๋“ฏ ํ•˜๋‹ค. + +### ๋ณด์™„ + +- ๋‹ค์‹œ ํ’€์–ด๋ณด์ž.. diff --git a/src/grap3fruit/py/boj/12731.py b/src/grap3fruit/py/boj/12731.py new file mode 100644 index 0000000..fcaf0b9 --- /dev/null +++ b/src/grap3fruit/py/boj/12731.py @@ -0,0 +1,71 @@ +import sys +import copy + +def getMinValueFromStr(time_str = "12:35"): + hour = int(time_str[0]+time_str[1]) + min = int(time_str[3]+time_str[4]) + return hour*60 + min + +def calc(backup_na, backup_nb, T): + print("check1: ", backup_na, backup_nb) + na_arr = copy.deepcopy(backup_na) + nb_arr = copy.deepcopy(backup_nb) + + count_na = len(backup_na) + count_nb = len(backup_nb) + for na_el in na_arr : # NA๊ฐ€ ๋จผ์ € ๋Œ๋•Œ, NBํ•ด๋‹น๋˜๋Š”๊ฒŒ์žˆ์œผ๋ฉด, + min = na_el[0] - T # NA[1] ์‘ ๋‚ด๊ฐ€ ๋จผ์ € NB ๊ฐ€์ ธ๊ฐˆ๊ฒŒ~ ํ•ด์„œ NB ๋นผ์ค˜์•ผํ•จ. ๋‹ค์Œ NA๋“ค์ด ์ฐฉ๊ฐ ์•ˆํ•˜๋„๋ก ใ…‡ใ…‡ + for nb_el in nb_arr: + print("na_el:",na_el[0]," nb_el:", nb_el[1]) + if min >= nb_el[1] : + nb_arr.remove(nb_el) + count_na -= 1 + break + + na_arr = backup_na + nb_arr = backup_nb + for nb_el in nb_arr : + min = nb_el[0] - T + for na_el in na_arr: + if min >= na_el[1] : + na_arr.remove(na_el) + count_nb -= 1 + break + + return [count_na, count_nb] + + +def main(): + N = int(sys.stdin.readline()) + + for x in range(N): + T = int(sys.stdin.readline()) # ํšŒ์ฐจ์‹œ๊ฐ„ + NA, NB = list(map(int,sys.stdin.readline().strip().split())) + + na_arr = [] + nb_arr = [] + + for i in range(NA): + temp_arr = list(map(str,sys.stdin.readline().strip().split())) + min = getMinValueFromStr(temp_arr[0]) + max = getMinValueFromStr(temp_arr[1]) + na_arr.append([min,max]) + print(i, min, max) + + for i in range(NB): + temp_arr = list(map(str,sys.stdin.readline().strip().split())) + min = getMinValueFromStr(temp_arr[0]) + max = getMinValueFromStr(temp_arr[1]) + nb_arr.append([min,max]) + print(i, min, max) + + print(NA,NB) + print(na_arr, nb_arr) + na_arr.sort() + nb_arr.sort() + + result_NA, result_NB = calc(na_arr, nb_arr, T) + + print("Case #{}:".format(x+1), result_NA, result_NB) + +main() diff --git a/src/grap3fruit/py/boj/1316.py b/src/grap3fruit/py/boj/1316.py new file mode 100644 index 0000000..3c2fa6d --- /dev/null +++ b/src/grap3fruit/py/boj/1316.py @@ -0,0 +1,22 @@ +import sys + +def check_word(word): + arr = [] + for idx, val in enumerate(word): + if not val in arr: + arr.append(val) + elif val in arr: + if word[idx-1] == val: + continue + return 0 + + return 1 + +n = int(sys.stdin.readline().strip()) +words = [] +answer = 0 + +for i in range(0, n): + answer += check_word((sys.stdin.readline().strip().split())[0]) + +print(answer) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/14889.md b/src/grap3fruit/py/boj/14889.md new file mode 100644 index 0000000..83cfb3e --- /dev/null +++ b/src/grap3fruit/py/boj/14889.md @@ -0,0 +1,24 @@ +# 14889 - ์„ฑ๊ณต + +## ๋ธŒ๋ฃจํŠธํฌ์Šค + +- ์ „์ฒด ์ผ€์ด์Šค ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ +- ์‚ฌ๋žŒ a,b ๋Šฅ๋ ฅ์น˜ ํ•ฉ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ +- ํŒ€๋‚ด ๋Šฅ๋ ฅ์น˜ ํ•ฉ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ +- ์ฝค๋น„๋„ค์ด์…˜ ์จ์„œ ๊ตฌํ˜„ํ•จ + +## pseudocode + +``` +cases = get_cases๋ฅผ ํ†ตํ•ด ํŒ€A์™€ ํŒ€B๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ์˜์ˆ˜ + +calc ํ•จ์ˆ˜ + ์ „์ฒด case๋ฅผ ๋Œ๋ฉด์„œ + ํŒ€A์™€ ํŒ€B์˜ ๋Šฅ๋ ฅ์น˜ ํ•ฉ์„ ๊ฐ๊ฐ ๊ตฌํ•ด์„œ + ๋‘˜์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜๊ณ  + ์ตœ์†Œ๊ฐ’์„ ๋ฆฌํ„ด. +``` + +## ๋ณด์™„ + +- ๋„์—ฐ๋‹˜ ์‚ฌ์šฉํ•˜์‹  next_permutation๋„ ์œ ์šฉํ•ด ๋ณด์ธ๋‹ค diff --git a/src/grap3fruit/py/boj/14889.py b/src/grap3fruit/py/boj/14889.py new file mode 100644 index 0000000..7eed3b2 --- /dev/null +++ b/src/grap3fruit/py/boj/14889.py @@ -0,0 +1,65 @@ +import sys +from itertools import combinations + +n = int(sys.stdin.readline()) +arr = [] + +for i in range(0,n): + arr.append(list(map(int,sys.stdin.readline().strip().split()))) +# n = 6 + +cases = [] +for i in range(1,n+1): + cases.append(i) + +# ์ „์ฒด ์ผ€์ด์Šค ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ +def get_cases(n, cases): + combination_cases = list(combinations(cases,int(n/2))) + teamA_cases = [] + + for case in combination_cases: + if case[0] == 1 : + teamA_cases.append(case) + + result = [] + for teamA in teamA_cases: + teamB = (set(cases) - set(teamA)) + result.append([set(teamA), teamB]) + + return result + +cases = get_cases(n, cases) +print(cases) + +# ์‚ฌ๋žŒ a,b ๋Šฅ๋ ฅ์น˜ ํ•ฉ +def get_sum(a,b,arr): + return arr[a-1][b-1] + arr[b-1][a-1] + +# print(get_sum(4,6,arr)) + +# ํŒ€๋‚ด ๋Šฅ๋ ฅ์น˜ ํ•ฉ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ +def get_team_sum(team, arr): + sum = 0 + for members in list(combinations(team,2)): + # print(members) + sum += get_sum(members[0], members[1], arr) + + return sum + +# print(get_team_sum({1,2,3}, arr)) + +def calc(cases, arr): + min = 1000 + + for case in cases: + teamA_sum = get_team_sum(case[0], arr) + teamB_sum = get_team_sum(case[1], arr) + + current_min = abs(teamA_sum - teamB_sum) + # print(case, current_min) + if current_min < min : + min = current_min + + return min + +print(calc(cases, arr)) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/1697.md b/src/grap3fruit/py/boj/1697.md new file mode 100644 index 0000000..0ca4205 --- /dev/null +++ b/src/grap3fruit/py/boj/1697.md @@ -0,0 +1,7 @@ +# 1697 - ์„ฑ๊ณต(ํžŒํŠธ) + +## BFS + +- BFS๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œ +- ์ฒ˜์Œ์—๋Š” ์ ‘๊ทผ์„ visited๋ฅผ ๋‘๊ณ  if not in ์„ ํ†ตํ•ด ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋Š”๋ฐ, visited๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋งŽ์ด ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์Œ. +- visited = [0]\*100001 ์ด๋ ‡๊ฒŒ ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด๋†“๊ณ , index์— ํ‘œ์‹œ๋ฅผ ๋‚จ๊ฒจ๋†“๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. diff --git a/src/grap3fruit/py/boj/1697.py b/src/grap3fruit/py/boj/1697.py new file mode 100644 index 0000000..9857bd8 --- /dev/null +++ b/src/grap3fruit/py/boj/1697.py @@ -0,0 +1,42 @@ +from collections import deque +import sys + +n, k = map(int,sys.stdin.readline().strip().split()) + +def get_possible(data): + return [data-1, data+1, data*2] + +def bfs(q, visited): + new_q = deque() + while q : + current = q.popleft() + visited[current] = 1 + for el in get_possible(current): + if k == el : + return True + + if el > 100000 or el < 0: + continue + + if visited[el] == 0 : + new_q.append(el) + visited[el] = 1 + + return new_q + +def calc(root): + if root == k: + return print(0) + + q = deque() + q.append(root) + + visited = [0]*100001 + count = 0 + while q: + q = bfs(q, visited) + count += 1 + if q == True: + return print(count) + +calc(n) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/17609.md b/src/grap3fruit/py/boj/17609.md new file mode 100644 index 0000000..7bc0647 --- /dev/null +++ b/src/grap3fruit/py/boj/17609.md @@ -0,0 +1,154 @@ +# 17609 - ์„ฑ๊ณต(ํžŒํŠธ) + +## ํŽ ๋ฆฐ๋“œ๋กฌ + +์‹œ๋„ 1) + +```python +import sys + +def checkPD(data): + N = len(data) + + if N % 2 == 0: + for i in range(0, int(N/2)): + if data[i] != data[N-i-1] : + return False + return True + + if N % 2 == 1: + for i in range(0, int(N/2)): + if data[i] != data[N-i-1] : + return False + return True + +def get_new_string(data, idx): + arr_data = list(data) + del arr_data[idx] + return "".join(arr_data) + +def calc(data): + if checkPD(data) == True : + return 0 + + for i in range(len(data)): + result = get_new_string(data, i) + if checkPD(result): + return 1 + + return 2 + +N = int(sys.stdin.readline()) + +for _ in range(N) : + data = sys.stdin.readline().strip() + print(calc(data)) +``` + +์‹œ๊ฐ„์ดˆ๊ณผ ๋œธ. + +calc์—์„œ ํฌ๋ฌธ์ด n\*n์œผ๋กœ ๋Œ์•„์„œ ๊ทธ๋Ÿฐ๊ฒƒ๊ฐ™๋‹ค. + +์‹œ๋„ 2) + +```python +import sys + +def checkPD1(data): + N = len(data) + for i in range(0, int(N/2)): + if data[i] != data[N-i-1] : + return False + return True + +def checkPD2(data, idx): + N = len(data) + + left = 0 + right = 0 + # print(data, idx) + for i in range(0, int(N/2)): + if i == idx or N-i-1 == idx: + if idx < int(N/2): + left = 1 + if idx > int(N/2): + right = 1 + # print(i+left, " # ", N-i-1-right) + if data[i+left] != data[N-i-1-right] : + return 2 + + return 1 + +def calc(data): + if checkPD1(data) == True : + return 0 + + for i in range(len(data)): + result = checkPD2(data,i) + if result != 2: + return result + + return result + +# data = 'summuus' +# print(calc(data)) +N = int(sys.stdin.readline()) + +for _ in range(N) : + data = sys.stdin.readline().strip() + print(calc(data)) +``` + +checkPD2์— index๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ํ•ด๋‹น index์ผ๋•Œ๋Š” ๊ฑด๋„ˆ๋„๋Š” ๋ฐฉ์‹. + +์ด๊ฒƒ๋„ calc์—์„œ n๋งŒํผ ๋Œ๊ณ , ๋˜ checkPD2์—์„œ n๋งŒํผ ๋ˆ๋‹ค. ์กฐ๊ธˆ ์ ๋”๋ผ๋„ ๊ทธ๋ž˜๋„ N^2์— ๊ฐ€๊นŒ์›€ + +์‹œ๋„ 3) + +```python +import sys + +def checkPD2(data, start_idx, l_r_flag): + N = len(data) + left = 0 + right = 0 + + if l_r_flag == 'left': + left = 1 + if l_r_flag == 'right': + right = 1 + + for i in range(start_idx, int(N/2)): + if data[i+left] != data[N-i-1-right] : + return 2 + return 1 + +def checkPD1(data): + N = len(data) + + for i in range(0, int(N/2)): + if data[i] != data[N-i-1] : + result = checkPD2(data, i, 'left') + if result == 1 : + return 1 + result = checkPD2(data, i, 'right') + return result + + return 0 + +N = int(sys.stdin.readline()) + +for _ in range(N) : + data = sys.stdin.readline().strip() + print(checkPD1(data)) +``` + +checkPD1์„ ๋Œ๋‹ค๊ฐ€, ์„œ๋กœ ๋‹ค๋ฅธ๊ฒŒ ๋ฐœ๊ฒฌ๋˜๋ฉด "๊ธฐํšŒ๋ฅผ ํ•œ๋ฒˆ ๋” ์ค€๋‹ค" (์‚ฌ์‹ค ๋‘๋ฒˆ ๋”์คŒ) + +checkPD2๋กœ ๋ณด๋‚ด์ฃผ๋Š”๋ฐ ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์™ผ์ชฝ๊ฑฐ๋ฅผ ํ•œ๋ฒˆ ๊ฑด๋„ˆ๋„๋Š” ๊ฒฝ์šฐ์™€, ์˜ค๋ฅธ์ชฝ์„ ํ•œ๋ฒˆ ๊ฑด๋„ˆ๋„๋Š” ๊ฒฝ์šฐ 2๋ฒˆ์˜ ๊ธฐํšŒ๋ฅผ ๋” ์ œ๊ณตํ•œ๋‹ค. + +๊ทธ๋ ‡๊ธฐ๋•Œ๋ฌธ์— N์œผ๋กœ ๋„๋Š” ๋™์•ˆ์— ๋ชจ๋‘ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๊ณ , ๋งŽ์•„๋„ left, right 2๋ฒˆ์ด๋ผ 2N์ธ๋“ฏ ํ•˜๋‹ค. + +ํ˜ผ์ž์„œ ์•„์ด๋””์–ด๋ฅผ ๋„์ถœํ•ด๋‚ด์ง„ ๋ชปํ–ˆ๋‹ค ใ… ใ…  ๊ตฌ๊ธ€๋ง ํ•ด์„œ ์ฐธ๊ณ  ํ–ˆ์Œ. + +[https://awesomeroo.tistory.com/68](https://awesomeroo.tistory.com/68) diff --git a/src/grap3fruit/py/boj/17609.py b/src/grap3fruit/py/boj/17609.py new file mode 100644 index 0000000..b4ef557 --- /dev/null +++ b/src/grap3fruit/py/boj/17609.py @@ -0,0 +1,36 @@ +import sys + +def checkPD2(data, start_idx, l_r_flag): + N = len(data) + left = 0 + right = 0 + + if l_r_flag == 'left': + left = 1 + if l_r_flag == 'right': + right = 1 + + for i in range(start_idx, int(N/2)): + if data[i+left] != data[N-i-1-right] : + return 2 + return 1 + +def checkPD1(data): + N = len(data) + + for i in range(0, int(N/2)): + if data[i] != data[N-i-1] : + result = checkPD2(data, i, 'left') + if result == 1 : + return 1 + result = checkPD2(data, i, 'right') + return result + + return 0 + +N = int(sys.stdin.readline()) + +for _ in range(N) : + data = sys.stdin.readline().strip() + print(checkPD1(data)) + diff --git a/src/grap3fruit/py/boj/18233.md b/src/grap3fruit/py/boj/18233.md new file mode 100644 index 0000000..1e49115 --- /dev/null +++ b/src/grap3fruit/py/boj/18233.md @@ -0,0 +1,21 @@ +# 18233 - ์‹œ๊ฐ„์ดˆ๊ณผ + +## ๋น„ํŠธ๋งˆ์Šคํฌ + +## pseudocode + +``` +์ž…๋ ฅ๋ฐ›์„๋•Œ, + Min์ด E์ดˆ๊ณผ์ผ๋•Œ๋Š” ๋„˜๊น€. + Max๊ฐ€ E์ดˆ๊ณผ์ผ๋•Œ๋Š” MAX๋ฅผ E๋กœ ํ•จ. + +์กฐํ•ฉ ๊ฒฝ์šฐ์˜์ˆ˜๋Š” ์ฝค๋น„๋„ค์ด์…˜์„ P๋งŒํผ ํ•ด์„œ ๊ตฌํ•จ. + +์œ„์—์„œ ๊ตฌํ•ด์ง„ ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ๋Œ๋ฉด์„œ, + ํ•ด๋‹น ์กฐํ•ฉ์—์„œ ๊ฐ€๋Šฅํ•œ ํ•ฉ๋“ค์„ ๋ชจ๋‘ ๊ตฌํ•˜๊ณ , + ๊ทธ ํ•ฉ๋“ค ์ค‘์— E๊ฐ€ ์žˆ์œผ๋ฉด ์ •๋‹ต์„ ๋ฆฌํ„ดํ•จ. +``` + +## ๋ณด์™„ + +- ๋„์—ฐ๋‹˜, ๋„ํ˜ธ๋‹˜ ํ•˜์‹ ๊ฒƒ ์ฒ˜๋Ÿผ min max ๊ฐ’ ํ™œ์šฉํ•˜์—ฌ ํ•ด์•ผํ• ๋“ฏ. ๋ชจ๋“  case๋ฅผ ๋‹ค ํŽด์„œ ํ•˜๋Š”๊ฑด ์‹œ๊ฐ„์ดˆ๊ณผ ๋œฐ์ˆ˜๋ฐ–์— ์๋‹ค.. diff --git a/src/grap3fruit/py/boj/18233.py b/src/grap3fruit/py/boj/18233.py new file mode 100644 index 0000000..ebd6362 --- /dev/null +++ b/src/grap3fruit/py/boj/18233.py @@ -0,0 +1,86 @@ +import sys +from itertools import combinations +import copy + +N, P, E = list(map(int,sys.stdin.readline().strip().split())) + +members = [] +for i in range(0,N): + min, max = list(map(int,sys.stdin.readline().strip().split())) + temp_set = set([]) + + if min > E: + continue + + if max > E: + max = E + + for i in range(min,max+1): + temp_set.add(i) + members.append(temp_set) + +print(members) + +cases = [] +for i in range(0,len(members)): + cases.append(i) + +combination_cases = list(combinations(cases,P)) + +print(combination_cases) + +# n์ค‘ ํฌ๋ฌธ ์ƒ์„ฑ. +def iter_func(case, count): + if count == 0: #๊ฐ€์žฅ ๊นŠ์€ ์Šคํƒ + sum_dic = dict() + for i in members[case[len(case)-count-1]]: + sum_dic[i] = [i] + return sum_dic + + sum_dic = iter_func(case, count-1) + + temp_dic = copy.deepcopy(sum_dic) + for i in members[case[len(case)-count-1]]: + for key, value in sum_dic.items(): + try: + if len(temp_dic[i+key]) == len(case): #์ด๋ฏธ ํ•ด๋‹น key๊ฐ€ ์ฐจ์žˆ์œผ๋ฉด ๋„˜์–ด๊ฐ + continue + if sum(temp_dic[i+key]+i) == i+key: + temp_dic[i+key].append(i) + except: + newlist = list(value) + newlist.append(i) + temp_dic[i+key] = newlist + + if i+key == E and len(temp_dic[i+key]) == len(case): #ํ˜„์žฌ i+key ํ‚ค๊ฐ€ E์™€ ๊ฐ™๊ณ , ์ฐจ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ๋ฆฌํ„ด. + return temp_dic + # print(temp_dic) + + return temp_dic + +def getResult(case, value): + result = [] + for i in range(0,N): + result.append(0) + + for i in range(0,len(case)): + result[case[i]] = value[len(case)-i-1] + + return result + +flag = False +for case in combination_cases: + case_dic = iter_func(case, len(case)-1) + # print(case_dic) + if E in case_dic.keys(): + if len(case_dic[E]) == len(case) : + print(case) + print(case_dic[E]) + flag = True + + print(getResult(case, case_dic[E])) + # break + +if flag == False: + print(-1) + diff --git a/src/grap3fruit/py/boj/19238.py b/src/grap3fruit/py/boj/19238.py new file mode 100644 index 0000000..7e5b250 --- /dev/null +++ b/src/grap3fruit/py/boj/19238.py @@ -0,0 +1,63 @@ +def getDistance(a,b): + return abs(a[0] - b[0]) + abs(a[1] - b[1]) + +def get_next_pos(maze, taxi_pos, man_pos, visited): + min_distance = 1000 + min_cur = [] + next_list = [[1,0],[0,1],[-1,0],[0,-1]] + + for next in next_list: + cur_pos = [taxi_pos[0] + next[0],taxi_pos[1] + next[1]] + + if cur_pos in visited : + continue + + if maze[cur_pos[0]][cur_pos[1]] == 1 : + continue + + cur_distance = getDistance(cur_pos, man_pos) + + if cur_distance < min_distance : + min_distance = cur_distance + min_cur = cur_pos + + visited.append(min_cur) + return min_cur + +def get_visited(maze, taxi_input, man_input): + taxi_pos = taxi_input + man_pos = man_input + visited = [] + + while taxi_pos != man_pos: + taxi_pos = get_next_pos(maze, taxi_pos, man_pos, visited) + + print(visited) + + +if __name__ == "__main__": + input_info = list(map(int, input().split())) + maze_len = input_info[0] + 2 + maze = [] + + for i in range(0, maze_len): + maze_row = [] + if i == 0 or i == maze_len-1: + for j in range(0, maze_len): + maze_row.append(1) + maze.append(maze_row) + continue + + maze_data = list(map(int, input().split())) + maze_row.append(1) + maze.append(maze_row + maze_data + maze_row) + + for el in maze : + print(el) + + taxi_input = [6,5] + taxi_oil = 15 + man_input = [2,2] + + get_visited(maze,taxi_input,man_input) + diff --git a/src/grap3fruit/py/boj/1932.md b/src/grap3fruit/py/boj/1932.md new file mode 100644 index 0000000..729a9ea --- /dev/null +++ b/src/grap3fruit/py/boj/1932.md @@ -0,0 +1,48 @@ +# 1932 - ์„ฑ๊ณต + +## DP + +์‚ผ๊ฐํ˜• + +```python +i=0 0 +i=1 1 2 +i=2 3 4 5 +i=3 6 7 8 9 + +i ๊ฐ’๊ณผ, a_index๊ฐ’(์œ„ ์‚ผ๊ฐํ˜•์˜ ์ˆซ์ž๊ฐ’์ด a_index)์„ ํ™œ์šฉ +``` + +data์— ์ž…๋ ฅ์„ ๋‹ด๊ณ , + +a์— ํ‰ํƒ„ํ™”๋œ data๋ฅผ ๋‹ด์Œ. ([1],[2,3]) โ†’ ([1,2,3]) + +base dp : dp[0], dp[1], dp[2] ๊ตฌํ•ด๋†“๊ณ . + +dp[n]์—์„œ n์ด ์‚ผ๊ฐํ˜• ํ•œ row์˜ ๋งจ ์•ž์ผ ๊ฒฝ์šฐ + +```python +dp[a_index] = dp[a_index-i] + a[a_index] +``` + +dp[n]์—์„œ n์ด ์‚ผ๊ฐํ˜• ํ•œ row์˜ ๋งจ ๋’ค์ผ ๊ฒฝ์šฐ + +```python +dp[a_index] = dp[a_index-i-1] + a[a_index] +``` + +dp[n]์—์„œ n์ด ์‚ผ๊ฐํ˜• ํ•œ row์˜ ๋งจ์•ž ๋˜๋Š” ๋งจ ๋’ค๊ฐ€ ์•„๋‹Œ, ์ค‘๊ฐ„์ผ ๊ฒฝ์šฐ + +```python +dp[a_index] = max(dp[a_index-i-1] + a[a_index], dp[a_index-i] + a[a_index]) +``` + +์ด๋•Œ dp์˜ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค. + +### ์ด์Šˆ + +- ์ „ํ˜•์ ์ธ DP๋ฌธ์ œ. ๊ทผ๋ฐ ๊ณ„์‚ฐ์ด ์กฐ๊ธˆ ๋ณตํ•ฉํ•ด์„œ ์˜ค๋ž˜๊ฑธ๋ ธ์Œ. + +### ๋ณด์™„ + +- ๋” ๋งŽ์ด ํ’€์ž diff --git a/src/grap3fruit/py/boj/1932.py b/src/grap3fruit/py/boj/1932.py new file mode 100644 index 0000000..bdd0222 --- /dev/null +++ b/src/grap3fruit/py/boj/1932.py @@ -0,0 +1,56 @@ +import sys +import itertools +N = int(sys.stdin.readline()) + +data = [] +for _ in range(N): + data.append(list(map(int,sys.stdin.readline().strip().split()))) + +print("data:",data) + +def chain(*iterables): # ์ฐธ์กฐ : https://winterj.me/list_of_lists_to_flatten/ + # chain('ABC', 'DEF') --> A B C D E F + for it in iterables: + for element in it: + yield element + +a = list(itertools.chain(*data)) +print("a:",a) + +def calc(data, a): + + dp = [0]*501 + dp[0] = a[0] + + if N == 1: + return (dp[0]) + + + dp[1] = a[0] + a[1] + dp[2] = a[0] + a[2] + + if N == 2: + return max(dp[1], dp[2]) + + a_index = 0 + + for i, row in enumerate(data) : + print(i) + if i == 0: + continue + + for j, el in enumerate(row): + a_index += 1 + if j == 0 : + dp[a_index] = dp[a_index-i] + a[a_index] + continue + + if j == len(row)-1: + dp[a_index] = dp[a_index-i-1] + a[a_index] + continue + + dp[a_index] = max(dp[a_index-i-1] + a[a_index], dp[a_index-i]+a[a_index]) + + return(max(dp)) + +print(calc(data ,a)) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/1946.md b/src/grap3fruit/py/boj/1946.md new file mode 100644 index 0000000..c122a03 --- /dev/null +++ b/src/grap3fruit/py/boj/1946.md @@ -0,0 +1,7 @@ +# 1946 - ์„ฑ๊ณต + +## ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +- ๋จผ์ € [i][0]์„ ์ •๋ ฌํ•ด์คŒ. +- [i][0]์€ [j][0]๋ณด๋‹ค ํ•ญ์ƒ ํฐ ์ƒํƒœ, ์—ฌ๊ธฐ์„œ [i][1] ๋งˆ์ € ํฌ๋ฉด, ์„ ๋ฐœ๋˜์ง€ ์•Š๋Š”๋‹ค. +- ์„ ๋ฐœ๋˜์ง€ ์•Š๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ, ์ „์ฒด ์ˆ˜์—์„œ ๋นผ์„œ ๊ฒฐ๊ณผ ๋„์ถœ. diff --git a/src/grap3fruit/py/boj/1946.py b/src/grap3fruit/py/boj/1946.py new file mode 100644 index 0000000..2ac9c79 --- /dev/null +++ b/src/grap3fruit/py/boj/1946.py @@ -0,0 +1,30 @@ +import sys + +def check_score(score_list): + count = 0 + + for i in range(0,len(score_list)-1): + check = False + for j in range(i+1, len(score_list)): + print(i,j, score_list[i][1], score_list[j][1]) + if score_list[i][1] > score_list[j][1]: #[i][0]์€ [j][0]๋ณด๋‹ค ํ•ญ์ƒ ํฐ ์ƒํƒœ, ์—ฌ๊ธฐ์„œ [1] ๋งˆ์ € ํฌ๋ฉด, + print(i,j) + check = True + count += 1 + break + + return count + + +if __name__ == "__main__": + T = int(sys.stdin.readline()) + for i in range(T): + N = int(sys.stdin.readline()) + score_list = [] + for j in range(N): + score_list.append(list(map(int,sys.stdin.readline().strip().split()))) + + score_list.sort(reverse=True) + print(score_list) + print("Score:", N - check_score(score_list)) + diff --git a/src/grap3fruit/py/boj/1991.py b/src/grap3fruit/py/boj/1991.py new file mode 100644 index 0000000..989fc36 --- /dev/null +++ b/src/grap3fruit/py/boj/1991.py @@ -0,0 +1,86 @@ +import sys + +class Node: + def __init__(self, data): + self.data = data + self.left = None + self.right = None + +class Tree: + def __init__(self, root_node): + self.root = root_node + + def insert(self, node, mid, left, right): + if node.data == mid: + node.left = Node(left) + node.right = Node(right) + return + + if node.left == None : + return + if node.right == None : + return + + self.insert(node.left, mid, left, right) + self.insert(node.right, mid, left, right) + + return + + def pre_order(self, node): # root == 'A' + if node.data != '.' : + print(node.data, end=('')) + + if node.left == None : + return + if node.right == None : + return + + self.pre_order(node.left) + self.pre_order(node.right) + return + + def post_order(self, node): + + if node.left == None : + return + if node.right == None : + return + + self.post_order(node.left) + self.post_order(node.right) + + if node.data != '.' : + print(node.data, end=('')) + + return + + def in_order(self, node): + + if node.left == None : + return + if node.right == None : + return + + self.in_order(node.left) + + if node.data != '.' : + print(node.data, end=('')) + + self.in_order(node.right) + + return + +n = int(sys.stdin.readline().strip()) + +root_node = Node('A') +tree = Tree(root_node) + +for i in range(0, n): + cmd = list(sys.stdin.readline().strip().split()) + tree.insert(root_node, cmd[0], cmd[1], cmd[2]) + +tree.pre_order(root_node) +print() +tree.in_order(root_node) +print() +tree.post_order(root_node) diff --git a/src/grap3fruit/py/boj/2011.md b/src/grap3fruit/py/boj/2011.md new file mode 100644 index 0000000..bf0d914 --- /dev/null +++ b/src/grap3fruit/py/boj/2011.md @@ -0,0 +1,18 @@ +# 2011 - ํžŒํŠธ + +## DP + +์ฒ˜์Œ์—” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด์„œ, + +2๊ฐœ์”ฉ ๋ฌถ์ด๋Š”๊ฒŒ 0 0 and int(input[0]) < 3: + dp[1] = 1 + else: + return 0 + + if int(input[1]) != 0: # input[1]์ด 0์ด ์•„๋‹ˆ๊ณ , + if (int(input[1]) < 7 and int(input[0]) == 2) or int(input[0]) == 1: # 10 ~ 26 ์‚ฌ์ด๋ฉด + dp[1] = 2 + else: + dp[1] = 1 + + if len(input) == 2: # ์ž…๋ ฅ์ด ๋‘๊ฐœ๋ฉด return + return dp[1] + + n = 2 + while n < len(input): # dp[2] ๋ถ€ํ„ฐ ์—ฌ๊ธฐ์„œ ๊ตฌํ•จ. + if int(input[n]) > 0: # input[n]์ด 0๋ณด๋‹ค ํด ๊ฒฝ์šฐ๋Š” input[n-1]์— ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ์ค„ ์ˆ˜ ์žˆ์Œ. + dp[n] = dp[n-1] + + # n,n-1์ด 10 ~ 26 ์‚ฌ์ด๋ฉด, dp[n-2]์— 10~26์„ ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ. + if (int(input[n]) < 7 and int(input[n-1]) == 2) or int(input[n-1]) == 1: + dp[n] = (dp[n-2] + dp[n]) + + n += 1 + + return(dp[len(input)-1] % 1000000) + + +print(calc(input, dp)) diff --git a/src/grap3fruit/py/boj/2178.md b/src/grap3fruit/py/boj/2178.md new file mode 100644 index 0000000..1538776 --- /dev/null +++ b/src/grap3fruit/py/boj/2178.md @@ -0,0 +1,46 @@ +# 2178 - ์„ฑ๊ณต(ํžŒํŠธ) + +## BFS + +bfs๋กœ ํ’€์–ด์„œ ์„ฑ๊ณต + +bfs์—์„œ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ• ๋•Œ๋Š” q_size๋ฅผ ์ด์šฉํ•ด์„œ ํ์— ๋„ฃ๊ธฐ ์ „ ๊ณ„์ธต ๋‹จ์œ„๋กœ count ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. + +๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ๋งŽ์€๊ฒƒ ๊ฐ™์€๋ฐ. ์ผ๋‹จ ์ด๊ฒƒ ์ดํ•ดํ•˜๊ณ  ํ’ˆ.. + +ํ…Œ์ผ€ + +``` +2 2 +11 +11 + +3 3 +111 +111 +111 + +4 7 +1110111 +1011101 +1000001 +1111111 + +2 100 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 + +6 5 +11111 +10001 +10101 +10111 +10000 +11111 + +4 7 +1110110 +0011110 +0001011 +0001111 +``` diff --git a/src/grap3fruit/py/boj/2178.py b/src/grap3fruit/py/boj/2178.py new file mode 100644 index 0000000..27cbdb4 --- /dev/null +++ b/src/grap3fruit/py/boj/2178.py @@ -0,0 +1,61 @@ +import sys +from collections import deque + +N, M = map(int, sys.stdin.readline().strip().split()) +data = [[0]*(M+2)] +for _ in range(N): + input_arr = '0' + str(sys.stdin.readline().strip().split()[0]) + '0' + splited_arr = [int(i) for i in input_arr] + data.append(splited_arr) + +data.append([0]*(M+2)) +print(N, M, data) + + +def bfs(init, N, M, data): + global count + global visited + global queue + + queue.append(init) + while queue: + q_size = len(queue) + + for _ in range(q_size): + el = queue.popleft() + Y = el[0] + X = el[1] + if el not in visited and data[Y][X] == 1: + visited.append(el) + print(el) + + if X == M and Y == N: + print("๋„์ฐฉ") + print(visited) + print(count) + break + + right = [Y, X+1] + down = [Y+1, X] + left = [Y, X-1] + up = [Y-1, X] + + for pos in [right, down, left, up]: + if data[pos[0]][pos[1]] != 0: + queue.append(pos) + count += 1 + + +count = 1 +visited = [] +queue = deque([]) + + +def calc(N, M, data): + global count + global visited + init = [1, 1] + bfs(init, N, M, data) + + +calc(N, M, data) diff --git a/src/grap3fruit/py/boj/2502.md b/src/grap3fruit/py/boj/2502.md new file mode 100644 index 0000000..3d9e872 --- /dev/null +++ b/src/grap3fruit/py/boj/2502.md @@ -0,0 +1,16 @@ +# 2502 - ์„ฑ๊ณต + +## DP + +dp[n] = dp[n-1] + dp[n] +dp[1] = 'a' +dp[2] = 'b' + +๋กœ ์ฃผ๊ณ , dp๋ฅผ ๊ตฌํ•˜๋ฉด + +dp[K] = 'bababbab' ์ด๋Ÿฐ์‹์œผ๋กœ ๋‚˜์˜จ๋‹ค. +์ด๊ฑธ + +count_a x j + count_b x i == K ์‹์œผ๋กœ ๋ฐ”๊ฟ”์„œ + +i, j ์ด์ค‘ํฌ๋ฌธ ๋Œ๋ ค์„œ ๊ตฌํ•จ diff --git a/src/grap3fruit/py/boj/2502.py b/src/grap3fruit/py/boj/2502.py new file mode 100644 index 0000000..52006ca --- /dev/null +++ b/src/grap3fruit/py/boj/2502.py @@ -0,0 +1,31 @@ +import sys +D, K = list(map(int, input().split())) +dp = [0]*(D+1) + +dp[1] = 'a' +dp[2] = 'b' + +idx = 3 + +while True: + dp[idx] = dp[idx-2] + dp[idx-1] + + if idx == D: + print(dp) + break + + idx += 1 + +count_A = dp[D].count('a') +count_B = dp[D].count('b') + +def calc(count_A, count_B): + for i in range(1, K): + for j in range(1, K): + if (count_A * j + count_B * i) == K: + print(j) + print(i) + return + + +calc(count_A, count_B) diff --git a/src/grap3fruit/py/boj/2579.md b/src/grap3fruit/py/boj/2579.md new file mode 100644 index 0000000..c128db7 --- /dev/null +++ b/src/grap3fruit/py/boj/2579.md @@ -0,0 +1,27 @@ +# 2579 - ์„ฑ๊ณต (ํžŒํŠธ) + +## DP + +dp[1], dp[2], dp[3] ๋ฒ ์ด์Šค๋กœ ๊ตฌํ•˜๊ณ  + +``` +dp[n] = max( + +dp[n-2] + a[n] , + +dp[n-3] + a[n-1] + a[n] + + ) +``` + +a[n]๋ฒˆ์งธ๋ฅผ ๋ฐŸ๊ธฐ ์œ„ํ•ด์„  ์•„๋ž˜ ๋‘๊ฐ€์ง€ ์ผ€์ด์Šค๊ฐ€ ์™€์•ผํ•œ๋‹ค. +a[n-2] โ†’ 0 โ†’ a[n] [n-2]๋ฒˆ์งธ๋ฅผ ๋ฐŸ๋Š” ๊ฒฝ์šฐ. +a[n-3] โ†’ 0 โ†’ a[n-1] โ†’ a[n] [n-3]๋ฒˆ์งธ๋ฅผ ๋ฐŸ๋Š” ๊ฒฝ์šฐ. + +์ด ๋‘ ๊ฒฝ์šฐ์ค‘ ํ•˜๋‚˜๊ฐ€ a[n]๋ฒˆ์งธ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ์จ ๊ฐ€๋Šฅํ•˜๊ณ , +์ด๋•Œ ์ตœ์†Œ๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. +๋”ฐ๋ผ์„œ ์ ํ™”์‹์ด ์œ„์™€ ๊ฐ™์ด ๋œ๋‹ค. + +## ๋ณด์™„ + +- ํžŒํŠธ๋ณด๊ณ  ํ’€์—ˆ๋‹ค. dp ๊ฐ์ด ์Šฌ์Šฌ ์žกํžˆ๊ธด ํ•˜๋Š”๋ฐ ์—ฌ์ „ํžˆ ์‰ฝ์ง€ ์•Š๋‹ค ๐Ÿ˜ฅ diff --git a/src/grap3fruit/py/boj/2579.py b/src/grap3fruit/py/boj/2579.py new file mode 100644 index 0000000..4642a0e --- /dev/null +++ b/src/grap3fruit/py/boj/2579.py @@ -0,0 +1,54 @@ +import sys + +N = int(sys.stdin.readline()) + +score_list = [] +for _ in range(N): + score_list.append(int(sys.stdin.readline())) + +def get_dp_3(a,b,c,d): + max = a+b+d + if a+c+d > max: + max = a+c+d + + if b+c > max: + max = b+c + + return max + +def get_max(a,b): + if a>b: + return a + + return b + +def calc(score_list): + dp = [0]*301 + dp[0] = score_list[0] + if N==1 : + print(dp[0]) + return + + dp[1] = score_list[1] + score_list[0] + if N==2 : + print(dp[1]) + return + + dp[2] = get_max(score_list[0],score_list[1]) + score_list[2] + if N==3 : + print(dp[2]) + return + + dp[3] = get_dp_3(score_list[0],score_list[1],score_list[2],score_list[3]) + if N==4 : + print(dp[3]) + return + + print(dp[0],dp[1],dp[2],dp[3]) + for i in range(4, N): + dp[i] = get_max(dp[i-2], dp[i-3]+score_list[i-1])+score_list[i] + print(i, dp[i]) + print(dp[len(score_list)-1]) + return + +calc(score_list) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/2606.md b/src/grap3fruit/py/boj/2606.md new file mode 100644 index 0000000..609b16c --- /dev/null +++ b/src/grap3fruit/py/boj/2606.md @@ -0,0 +1,6 @@ +# 2606 - ์„ฑ๊ณต + +## ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ + +- ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ๋กœ์จ, BFS, DFS (์Šคํƒ, ์žฌ๊ท€) ๋ญ˜ ์จ๋„ ์ž˜ ํ’€๋ฆผ. +- ๊ทธ๋ž˜์„œ ํ•˜๋‚˜์”ฉ ๊ตฌํ˜„ํ•ด์„œ ํ†ต๊ณผ์‹œํ‚ค๋ฉด์„œ ์—ฐ์Šต. diff --git a/src/grap3fruit/py/boj/2606.py b/src/grap3fruit/py/boj/2606.py new file mode 100644 index 0000000..bb4403f --- /dev/null +++ b/src/grap3fruit/py/boj/2606.py @@ -0,0 +1,70 @@ +import sys +from collections import deque + +n = int(sys.stdin.readline().strip()) +m = int(sys.stdin.readline().strip()) + +datas = [] + +for i in range(0,m): + datas.append(list(map(int,list(sys.stdin.readline().strip().split())))) + +dic = {} +for value in datas: + try: + if len(dic[value[0]]) != 0 : + dic[value[0]].add(value[1]) + except : + dic[value[0]] = set([value[1]]) + +for value in datas: + try: + if len(dic[value[1]]) != 0 : + dic[value[1]].add(value[0]) + except : + dic[value[1]] = set([value[0]]) + +print(dic) +visited = set() +def dfs_recursive(root, dic): + visited.add(root) + + for key, values in dic.items(): + if key == root : + for value in values : + if value in visited: + continue + visited.add(value) + dfs_recursive(value, dic) + +def dfs_stack(root, dic): + stack = [root] + + while stack : + root = stack.pop() + + for key, values in dic.items(): + if key == root : + for value in values : + if value in visited: + continue + visited.add(value) + stack.append(value) + +def bfs_queue(root, dic): + queue = deque() + queue.append(root) + + while queue : + root = queue.popleft() + + for key, values in dic.items(): + if key == root : + for value in values : + if value in visited: + continue + visited.add(value) + queue.append(value) + +bfs_queue(1,dic) +print(visited) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/2644.md b/src/grap3fruit/py/boj/2644.md new file mode 100644 index 0000000..fbcd6b5 --- /dev/null +++ b/src/grap3fruit/py/boj/2644.md @@ -0,0 +1,33 @@ +# 2644 - ์„ฑ๊ณต + +## DFS + +๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ดŒ์ˆ˜ ๋น„๊ต ๋ฐฉ์‹์„ 6๊ณผ 10์„ ๋น„๊ตํ•œ๋‹ค๋ฉด + +1 โ†’ 2 โ†’ 4 โ†’ 8 โ†’ 10 + +1 โ†’ 2 โ†’ 6 + +์—์„œ, ๊ณตํ†ต๋˜๋Š” 1 โ†’ 2 ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๊ณ  ๊ธธ์ด๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ์ดŒ์ˆ˜๊ฐ€ ๋จ. + +์—ฌ๊ธฐ์„œ root๊ฐ€ ํ•ญ์ƒ 1์ด๋ผ๊ฑฐ๋‚˜, ๋ถ€๋ชจ๊ฐ€ ํ•ญ์ƒ ์ž‘์€ ์ˆ˜๋ผ๊ฑฐ๋‚˜ ํ•˜๋Š” ์กฐ๊ฑด์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— + +ํŠธ๋ฆฌ์˜ root๋ฅผ ๋ˆ„๊ตฌ๋กœ ์žก์•„์ค„๊นŒ? ๊ฐ€ ์ฒ˜์Œ ์ด์Šˆ์˜€๋‹ค. + +๋ชจ๋“  ๋ถ€๋ชจ๋ฅผ ๋‹ค root๋กœ ํ•ด์„œ dfs๋กœ ์ฒดํฌํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ? + +```python +for ๋ถ€๋ชจ in ๋ชจ๋“ ๋ถ€๋ชจ : + dps(๋ถ€๋ชจ, target_A) + dps(๋ถ€๋ชจ, target_B) +``` + +๋ชจ๋“  ๋ถ€๋ชจ๋ฅผ ํ•œ๋ฒˆ์”ฉ ๋‹ค root๋กœ ํ•ด์ฃผ๊ณ  + +result๊ฐ€ ์ œ๋Œ€๋กœ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ดŒ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์คŒ. + +result๊ฐ€ ์ œ๋Œ€๋กœ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š”, root๋กœ ๋ถ€ํ„ฐ target_A์™€ target_B์— ๋‘˜๋‹ค ๋„๋‹ฌํ•œ ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธ. + +dfs๋ฅผ ํ†ตํ•ด target์— ๋„๋‹ฌํ•˜๊ฒŒ ๋˜๋ฉด ์ง€๋‚˜์˜จ ๊ฒฝ๋กœ๋ฅผ result_A, B ์— ์ €์žฅํ•œ๋‹ค. + +result_A, B๋Š” set ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, intersection์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณตํ†ต๋˜๋Š” ๋ถ€๋ถ„์„ ์ œ์™ธํ•ด์ค€๋‹ค. diff --git a/src/grap3fruit/py/boj/2644.py b/src/grap3fruit/py/boj/2644.py new file mode 100644 index 0000000..353c60d --- /dev/null +++ b/src/grap3fruit/py/boj/2644.py @@ -0,0 +1,48 @@ +import sys + +N = int(sys.stdin.readline()) +A, B = map(int,sys.stdin.readline().strip().split()) +M = int(sys.stdin.readline()) + +dic = {} +for _ in range(M): + parent, child = map(int,sys.stdin.readline().strip().split()) + try: + if dic[parent] : + dic[parent].append(child) + except : + dic[parent] = [child] +print(dic) + +def dps(root, target, result): + try: + if dic[root]: + if target in dic[root]: + result.add(root) + result.add(target) + return True + + for el in dic[root]: + target_flag = dps(el, target, result) + if target_flag == True: + result.add(root) + return True + + except: + return False + + +def solution(N, A, B, M, dic): + for parent in dic : + result_A = set([parent]) + result_B = set([parent]) + dps(parent, A, result_A) + dps(parent, B, result_B) + + if (A in result_A) and (B in result_B): + intersec = result_A & result_B + return abs(len(result_A - intersec) + len(result_B - intersec)) + + return -1 + +print(solution(N, A, B, M, dic)) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/2957.py b/src/grap3fruit/py/boj/2957.py new file mode 100644 index 0000000..cd58132 --- /dev/null +++ b/src/grap3fruit/py/boj/2957.py @@ -0,0 +1,16 @@ +import sys + +n = int(sys.stdin.readline().strip()) +arr = [] +input = 0 +for i in range(0, n): + input = int(sys.stdin.readline().strip()) + + if i == 0 : + arr.append(input) + continue + + if arr + + +print(n,m) \ No newline at end of file diff --git a/src/grap3fruit/py/boj/7569.md b/src/grap3fruit/py/boj/7569.md new file mode 100644 index 0000000..8bd29a2 --- /dev/null +++ b/src/grap3fruit/py/boj/7569.md @@ -0,0 +1,16 @@ +# 7569 - ์„ฑ๊ณต(ํžŒํŠธ) + +## BFS + +- ์ฒ˜์Œ์—๋Š” ๋ชจ๋“  ๊ฐ’๋“ค์„ ์ˆœํ™˜ํ•˜์—ฌ ๊ฐ’์ด 1์ผ ๊ฒฝ์šฐ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌํ˜„. => ์‹œ๊ฐ„์ดˆ๊ณผ +- ๊ฐ’์ด 1์ธ ๊ฒฝ์šฐ๋ฅผ ๋งจ ์ฒ˜์Œ์— ์ฐพ์•„ ํ์— ๋‹ด์•„๋†“๊ณ , ํ์— ์žˆ๋Š” ๊ฐ’์„ ๋ฐ”๋กœ ์ ‘๊ทผํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋™์ž‘ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋‹ˆ ํ•ด๊ฒฐ๋จ. + +### ์ด์Šˆ + +- count๋ฅผ ์„ธ๋Š” ๋ฐฉ์‹์ด ๊ฐ์ž ๋‹ฌ๋ž์Œ. ๋‚˜๋Š” ํ๋ฅผ ํ•œ๋ฒˆ ์ˆ˜ํ–‰ํ• ๋•Œ๋งˆ๋‹ค countํ•ด์ฃผ๋„๋ก ํ–ˆ์Œ. +- try catch๋ฅผ ์จ์„œ list์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ pass๋˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, arr[-1]๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๊ณ  ๋งจ ๋’ค์˜ ๊ฐ’์—์„œ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๋Š”๋ฐฉ์‹์œผ๋กœ ์ •์ƒ๋™์ž‘์ด ๋จ. +- ์˜ˆ์ƒ์น˜๋ชปํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ธฐ์–ตํ•˜๋„๋ก!! + +### ๋ณด์™„ + +- ์ด๋Ÿฐ ๋ฌธ์ œ๋Š” ํ…Œ์ผ€๋ฅผ ๋งŒ๋“œ๋Š”๊ฒŒ ๊ต‰์žฅํžˆ ๋นก์„ธ๋‹ค. ์งˆ๋ฌธ๊ฒ€์ƒ‰์„ ์ฐพ์•„๋ณด๊ธฐ๋งŒ ํ•˜์ง€ ๋ง๊ณ  ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๋Š”๊ฒƒ๋„ ์—ฐ์Šต.. ํ•˜๋ฉด ์ข‹์„๊ฒƒ๊ฐ™์€๋ฐ ํ• ์ˆ˜์žˆ์œผ๋ ค๋‚˜..ใ…Žใ…Ž diff --git a/src/grap3fruit/py/boj/7569.py b/src/grap3fruit/py/boj/7569.py new file mode 100644 index 0000000..326edea --- /dev/null +++ b/src/grap3fruit/py/boj/7569.py @@ -0,0 +1,111 @@ +import sys +import pprint +from collections import deque + +def printArr(arr): + print('[') + for i in range(0,len(arr)): + print('[',end="") + for j in range(0,len(arr[0])): + print(arr[i][j]) + print(']') + + print(']') + +def check_zero(arr): + for i in arr: + for j in i: + if 0 in j: + return True + +def after_moment(new_q, i,j,k): + try: + if arr[i][j][k+1] == 0: + arr[i][j][k+1] = 1 + new_q.append([i,j,k+1]) + except: + pass + + try: + if arr[i][j][k-1] == 0 and k > 0: + arr[i][j][k-1] = 1 + new_q.append([i,j,k-1]) + except: + pass + + try: + if arr[i][j+1][k] == 0: + arr[i][j+1][k] = 1 + new_q.append([i,j+1,k]) + except: + pass + + try: + if arr[i][j-1][k] == 0 and j > 0: + arr[i][j-1][k] = 1 + new_q.append([i,j-1,k]) + except: + pass + + try: + if arr[i+1][j][k] == 0: + arr[i+1][j][k] = 1 + new_q.append([i+1,j,k]) + except: + pass + + try: + if arr[i-1][j][k] == 0 and i > 0: + arr[i-1][j][k] = 1 + new_q.append([i-1,j,k]) + except: + pass + + return new_q + +def bfs(q): + new_q = deque() + while q: + i, j, k = q.popleft() + after_moment(new_q, i, j, k) + + printArr(arr) + print(new_q) + return new_q + +def calc(q): + count = 0 + while q: + q = bfs(q) + count += 1 + + if check_zero(arr): + return print(-1) + + return print(count-1) + +if __name__ == "__main__": + inputs = list(map(int,sys.stdin.readline().strip().split())) + m = inputs[0] + n = inputs[1] + h = inputs[2] + + arr = [] + for j in range(0,h): + temp_arr = [] + + for i in range(0,n): + inputs = list(map(int,sys.stdin.readline().strip().split())) + temp_arr.append(inputs) + + arr.append(temp_arr) + + q = deque() + + for i in range(0,h): + for j in range(0,n): + for k in range(0,m): + if arr[i][j][k] == 1: + q.append([i,j,k]) + + calc(q) diff --git a/src/grap3fruit/py/boj/9095.md b/src/grap3fruit/py/boj/9095.md new file mode 100644 index 0000000..e7d2515 --- /dev/null +++ b/src/grap3fruit/py/boj/9095.md @@ -0,0 +1,44 @@ +# 9095 - ์„ฑ๊ณต (ํžŒํŠธ) + +## DP + +base dp ๋ฅผ 1,2,3์œผ๋กœ ๋‘๊ณ  + +``` +4 = 1+3 += 2+2 += 3+1 + +dp[4] = 1 + dp[3] += 2 + dp[2] += 3 + dp[1] + +5 = 1+4 += 2+3 += 3+2 + +dp[5] = 1 + dp[4] += 2 + dp[3] += 3 + dp[2] + +6 = 1+5 += 2+4 += 3+3 + +dp[n] = 1 + dp[n-1] += 2 + dp[n-2] += 3 + dp[n-3] +``` + +1,2,3์€ ๊ฐ’์ด ์•„๋‹ˆ๋ผ, ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ด๋‹ค. +1 + dp[n-1] ์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜, +2 + dp[n-2] ์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜, +3 + dp[n-3] ์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ +์ด 3 ์ข…๋ฅ˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ํ•ฉํ•ด์„œ dp[n]์ด ๋œ๋‹ค. + +๋”ฐ๋ผ์„œ dp[n] = dp[n-1] + dp[n-2] + dp[n-3]์œผ๋กœ ์ ํ™”์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. + +## ๋ณด์™„ + +- DP๋ฌธ์ œ์ธ๋ฐ DP๋กœ ์•ˆํ’€์—ˆ๋‹ค. ๐Ÿ˜‚ +- ๋„ํ˜ธ๋‹˜ ๋ฐฉ๋ฒ• ์ฒ˜๋Ÿผ DP๋กœ ํ’€์–ด๋ณผ ํ•„์š”๋„ ์žˆ์„๋“ฏ.. diff --git a/src/grap3fruit/py/boj/9095.py b/src/grap3fruit/py/boj/9095.py new file mode 100644 index 0000000..70658a2 --- /dev/null +++ b/src/grap3fruit/py/boj/9095.py @@ -0,0 +1,25 @@ +import sys + +T = int(sys.stdin.readline()) +N_list = [] +for _ in range(T): + N_list.append(int(sys.stdin.readline())) + +dp = [0]*11 +dp[1] = 1 +dp[2] = 2 +dp[3] = 4 + +for N in N_list: + if N <= 3: + print(dp[N]) + continue + + index = 4 + while True: + dp[index] = dp[index-1] + dp[index-2] + dp[index-3] + if index == N: + print(dp[index]) + break + + index += 1 \ No newline at end of file diff --git a/src/grap3fruit/py/input_test.py b/src/grap3fruit/py/input_test.py new file mode 100644 index 0000000..a9472f8 --- /dev/null +++ b/src/grap3fruit/py/input_test.py @@ -0,0 +1,37 @@ +import sys +from collections import deque +#n, m = map(int,sys.stdin.readline().strip().split()) +#num = list(map(int,sys.stdin.readline().strip().split())) + +# +#datas = list(map(int,sys.stdin.readline().strip().split())) + +#print(num[0]*num[1]) + + +## case ## +# 5 +# 3 2 1 -3 -1 + +n = int(sys.stdin.readline()) +arr = list(map(int,sys.stdin.readline().strip().split())) + + +## case ## +# 1 2 3 4 5 + +num_list = list(map(int, input().split())) + +## case ## +# abcd +# 3 +# P x +# L +# P y + +input_data = sys.stdin.readline().strip() +cmd_count = int(sys.stdin.readline().strip()) +cmd = [] + +for i in range(0, cmd_count): + cmd.append(list(sys.stdin.readline().strip().split())) \ No newline at end of file diff --git a/src/grap3fruit/py/programmers/17685.py b/src/grap3fruit/py/programmers/17685.py new file mode 100644 index 0000000..d5c276a --- /dev/null +++ b/src/grap3fruit/py/programmers/17685.py @@ -0,0 +1,2 @@ +words = ["go","gone","guild"] + diff --git a/src/grap3fruit/py/programmers/42578.py b/src/grap3fruit/py/programmers/42578.py new file mode 100644 index 0000000..f57df23 --- /dev/null +++ b/src/grap3fruit/py/programmers/42578.py @@ -0,0 +1,30 @@ +import itertools + +clothes = [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"], ["bluen_turban", "headgear"], ["blue_sung1", "eyewear"], ["blue1g1", "shoes"], ["blue_1", "shoes"]] + +answer = 0 +bucket = {} + +for cloth in clothes: + cloth_type = cloth[1] + if not cloth_type in bucket : + bucket[cloth_type] = 1 + + elif cloth_type in bucket : + bucket[cloth_type] += 1 + +arr = list(bucket.values()) + +result = 0 +for i in range(1, len(arr)+1): + nCr = itertools.combinations(arr, i) + calc_arr = list(nCr) + print(calc_arr) + for j in range(0, len(calc_arr)): + multi = 1 + for el in calc_arr[j] : + multi *= el + + result += multi + +print(result) diff --git a/src/grap3fruit/py/programmers/60057.py b/src/grap3fruit/py/programmers/60057.py new file mode 100644 index 0000000..55731b8 --- /dev/null +++ b/src/grap3fruit/py/programmers/60057.py @@ -0,0 +1,74 @@ +def is_same_arr(a,b): + if len(a) != len(b): + return False + + for i in range(len(a)): + if a[i] != b[i]: + return False + return True + +def compare(s, compare_length): + cursor = 0 + compress = 0 + compress_time = 0 + result_arr = [] + + while cursor < len(s): + ref_arr = s[cursor:cursor+compare_length] + compare_arr = s[cursor+compare_length:cursor+compare_length+compare_length] + + if len(compare_arr) == 0 : + result_arr.append([compress_time+1, len(s)-cursor]) + break + + if is_same_arr(ref_arr, compare_arr): + compress = compare_length + compress_time += 1 + + if not is_same_arr(ref_arr, compare_arr) : + if compress_time == 0 : + result_arr.append([compress_time+1, compare_length]) + else : + result_arr.append([compress_time+1, compress]) + + compress = 0 + compress_time = 0 + + cursor += compare_length + + return result_arr + +s = "xababcdcdababcdcd" +s = "abcabcabcabcdededededede" +# s = "abcabcdede" +# s = "aabbaccc" +# s = "a" +s = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" +#s = "aaaaa" +max_value = [0,0] +compare_lengths = int((len(s) - 0)/2) +min_result = 1001 +if compare_lengths == 0: + min_result = 1 +for compare_length in range(compare_lengths+1): + if compare_length == 0 : + continue + + result = 0 + result_arr = compare(s,compare_length) + print("result_arr: ",result_arr) + for e in result_arr: + if e[0] == 1 : + result += e[1] + + elif e[0] != 1 : + result += e[1]+len(str(e[0])) + + print("result: ", result) + if result < min_result: + min_result = result + +print(min_result) + +start_idx = 0 +result = 0