๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Code Tree

(23)
[์ฝ”๋“œํŠธ๋ฆฌ] Greedy - ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ / ๋™์ „ ์—ฐ์Šต๋ฌธ์ œ 1, 4, 5 ๋™์ „์„ ์ด์šฉํ•˜์—ฌ 8์›์„ ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ๋™์ „์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”. ์œ„ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ๋‹น์—ฐํžˆ ํฐ ๋™์ „๋ถ€ํ„ฐ ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํฐ ๋™์ „๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด 5 + 1 + 1 + 1์ด๋ฏ€๋กœ 4๊ฐœ์˜ ๋™์ „์ด ํ•„์š”ํ•˜์ง€๋งŒ, 4 + 4 ์—ญ์‹œ 8 ์ด๋ฏ€๋กœ ์ตœ์†Œ ๋™์ „์˜ ์ˆ˜๋Š” 2๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋‹ค์Œ ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ์š”? 1, 5, 10, 20 ๋™์ „์„ ์ด์šฉํ•˜์—ฌ 78์›์„ ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ๋™์ „์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”. ์ด ๊ฒฝ์šฐ์—๋Š” ํฐ ๋™์ „๋ถ€ํ„ฐ ๊ฑฐ์Šฌ๋Ÿฌ์ฃผ๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ฃผ์–ด์ง„ ๋™์ „๋“ค์ด ์ „๋ถ€ ๋ฐฐ์ˆ˜๊ด€๊ณ„์— ๋†“์—ฌ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํฐ ๋™์ „์ด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ์ž‘์€ ๋™์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•ญ์ƒ ์ข‹์€ ์„ ํƒ์ด ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์ˆ˜ ..
[์ฝ”๋“œํŠธ๋ฆฌ] Backtracking - ๋ฐฑํŠธ๋ž˜ํ‚น / ์žฌ๊ท€ ์—ฐ์Šต๋ฌธ์ œ ๋ฐฑํŠธ๋ž˜ํ‚น. ๋Œ€์ถฉ ์•Œ๊ณ ์žˆ๋Š”๊ฑด ๋ฐฑํŠธ๋ž˜ํ‚น == ์™„์ „ํƒ์ƒ‰(๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ฌด์‹ํ•˜๊ฒŒ ์ฐพ๊ธฐ)์—์„œ ๊ฐ€์ง€์น˜๊ธฐ๋กœ ํšจ์œจ ๋†’์ž„ ์ด์ •๋„๋ผ์„œ..ใ…‹ใ…‹ ์—ฐ์Šต๋ฌธ์ œ๋„ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค ๋Œ€๋ถ€๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋“ค์€ ์›ํ•˜๋Š” ๋ชจ๋“  ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด ๊ทธ ์ค‘ ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๋‹ต์„ ๊ณ ๋ฅด๋Š” ์‹์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ n ์ œํ•œ์ด ์ž‘๊ณ , ๋ชจ๋“  ์กฐํ•ฉ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ œํ•œ ์‹œ๊ฐ„๋ณด๋‹ค ๋” ์ž‘๋‹ค๋ฉด, ํ•ญ์ƒ ๋ชจ๋“  ์กฐํ•ฉ์„ ๋‹ค ๋งŒ๋“ค์–ด ๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ๋‚˜, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ž…์žฅ์—์„œ ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, (1, 1, 1, 1, 1), (1, 1, 1, 1, 2), (1, 1, 1, 1, 3), (1, 1, 1, 2, 1), (1, 1, 1, 2, 2), .. ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€๋Šฅํ•œ ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ for๋ฌธ ๋งŒ์„ ..
[์ฝ”๋“œํŠธ๋ฆฌ] DFS / BFS ์†Œ๋งˆ ์„œ๋ฅ˜์— ๋œ์ปฅ ๋ถ™์–ด๋ฒ„๋ฆฌ๊ณ , ์ฝ”ํ…Œ ์ค€๋น„ 4์ผ์ „์‚ฌ ๋„์ „... ์ž์ฃผ ๋‚˜์˜จ๋‹ค๋Š” ์œ ํ˜•์„ ๊ธ‰ํ•˜๊ฒŒ ๊ณต๋ถ€ํ•ด๋ด…๋‹ˆ๋‹ค ํ•˜ํ•˜ DFS๋Š” Depth First Search, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์ฒ˜๋Ÿผ ์ตœ๋Œ€ํ•œ ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•œ ํ›„ ๋” ์ด์ƒ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ๋‹ค์‹œ ์ด์ „์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ๋‚˜์„œ ์ด์ „๊ณผ์ •์œผ๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•œ๋‹ค๋Š” ์  ์ž…๋‹ˆ๋‹ค. DFS๋Š” ์žฌ๊ท€(์Šคํƒ)๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์ด ์žˆ๋‹ค๋ฉด ๊ทธ ์ง€์ ์„ ๋ฐฉ๋ฌธํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ณ , ๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•  ๊ณณ์ด ์—†๋‹ค๋ฉด ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๋˜ ์ง€์ ์„ ๋˜ ๋ฐฉ๋ฌธํ•˜๋ฉด ํšจ์œจ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ๋˜ ์ง€์ ์€ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ๋ฐฉ๋ฌธํ•œ ์ง€์ ์€ ์–ด๋–ค ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ ๋” ์ด์ƒ ๋ฐฉ..
[์ฝ”๋“œํŠธ๋ฆฌ] TreeSet ์—ฐ์Šต๋ฌธ์ œ ๋ฌธ์ œ : top K ์ˆซ์ž n๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ค‘๋ณต์„ ์ œ์™ธํ•˜๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ ์•ž์— ์žˆ๋Š” k๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”. ์ž…๋ ฅ ํ˜•์‹ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜ n๊ณผ k๊ฐ€ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” n๊ฐœ์˜ ์›์†Œ๊ฐ€ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. 1 ≤ k ≤ n ≤ 100,000 1 ≤ ์ฃผ์–ด์ง€๋Š” ์›์†Œ ๊ฐ’ ≤ 109 ์ถœ๋ ฅ ํ˜•์‹ ์ค‘๋ณต์„ ์ œ์™ธํ•˜๊ณ  ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ ์•ž์— ์žˆ๋Š” k๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ณต์„ ์ œ์™ธํ–ˆ์„ ๋•Œ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ k๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜์˜ ํ’€์ด #include #include using namespace std; int main() { int n; int k; int a; set s..
[์ฝ”๋“œํŠธ๋ฆฌ] Tree Set SW์ค‘์‹ฌ๋Œ€ํ•™ ์‚ฌ์—…๋‹จ์—์„œ CodeTree์™€ ํ•จ๊ป˜ ์‹ค์‹œํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ ์บ ํ”„์— ์ฐธ์—ฌํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. * ์ฐธ๊ณ  : python๊ณผ c++, java ๋“ฑ ์–ธ์–ด๋ณ„๋กœ ์„ค๋ช…์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„ ์กด์žฌ! ํ•„์ž๋Š” c++ ์‚ฌ์šฉ. set STL C++์—์„œ๋Š” set์ด๋ผ๋Š” STL์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. set์€ TreeSet ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, ์ด TreeSet์ด ๋ฐ”๋กœ ๊ท ํ˜• ์žกํžŒ ์ด์ง„ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(logN)์ž…๋‹ˆ๋‹ค. set์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” #include ํ—ค๋”์™€, set name; ํ˜•ํƒœ์˜ ์„ ์–ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. T๋Š” ํƒ€์ž…์œผ๋กœ, set ์•ˆ์— ๋“ค์–ด๊ฐˆ ์›์†Œ์˜ ํƒ€์ž…์„ ์ ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. #include #include using namespace std; in..
[์ฝ”๋“œํŠธ๋ฆฌ] Hash Set ์—ฐ์Šต๋ฌธ์ œ ๋ฌธ์ œ : ๋ฐ์ดํ„ฐ ๋น„๊ต ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋‘ ์ˆ˜์—ด์„ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์€ ์›์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ๋ณด์„ธ์š”. ์ž…๋ ฅ ํ˜•์‹ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ˆ˜์—ด 1์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„์—๋Š” ์ˆ˜์—ด 1์˜ ์›์†Œ๋“ค์ด ๊ณต๋ฐฑ์„ ๋‘๊ณ  ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ค„์—๋Š” ์ˆ˜์—ด 2์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜ m์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋„ค ๋ฒˆ์งธ ์ค„์—๋Š” ์ˆ˜์—ด 2์˜ ์›์†Œ๋“ค์ด ๊ณต๋ฐฑ์„ ๋‘๊ณ  ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. 1 ≤ n, m ≤ 100,000 −109 ≤ ์ฃผ์–ด์ง€๋Š” ์ˆซ์ž์˜ ๋ฒ”์œ„ ≤ 109 ์ถœ๋ ฅ ํ˜•์‹ ์ˆ˜์—ด 2์˜ ์›์†Œ์˜ ์ˆœ์„œ๋Œ€๋กœ ๊ทธ ์›์†Œ๊ฐ€ ์ˆ˜์—ด 1์— ์กด์žฌํ•˜๋Š” ์›์†Œ์ด๋ฉด 1์„, ์ˆ˜์—ด 1์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์›์†Œ์ด๋ฉด 0์„ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์˜ ํ’€์ด #include #include using namespace std; int main() { unor..
[์ฝ”๋“œํŠธ๋ฆฌ] Hash Set SW์ค‘์‹ฌ๋Œ€ํ•™ ์‚ฌ์—…๋‹จ์—์„œ CodeTree์™€ ํ•จ๊ป˜ ์‹ค์‹œํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ ์บ ํ”„์— ์ฐธ์—ฌํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. * ์ฐธ๊ณ  : python๊ณผ c++, java ๋“ฑ ์–ธ์–ด๋ณ„๋กœ ์„ค๋ช…์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„ ์กด์žฌ! ํ•„์ž๋Š” c++ ์‚ฌ์šฉ. unordered_set STL C++์—์„œ๋Š” unordered_set์ด๋ผ๋Š” STL์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. unordered_set์€ HashSet ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, ์ด HashSet์ด ๋ฐ”๋กœ ํ•ด์‹ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค. unordered_set์€ set๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, ๊ฐ’์˜ ์กด์žฌ ์—ฌ๋ถ€์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์ง€ ๊ทธ ์ˆœ์„œ์—๋Š” ์ „ํ˜€ ๊ด€์‹ฌ์ด ์—†๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. #include ํ—ค๋”์™€, unordered_set name; ํ˜•ํƒœ์˜..
[์ฝ”๋“œํŠธ๋ฆฌ] TreeMap ์—ฐ์Šต๋ฌธ์ œ ๋ฌธ์ œ n๊ฐœ์˜ ๋ช…๋ น์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”. ๋ช…๋ น์˜ ์ข…๋ฅ˜๋Š” ํฌ๊ฒŒ 4๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. add k v : (k, v) ์Œ์„ treemap์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. key๊ฐ€ k, value๊ฐ€ v๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ๋งŒ์•ฝ ๋™์ผํ•œ k๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด, v๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค. remove k : key๊ฐ€ k์ธ ์Œ์„ ์ฐพ์•„ treemap์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. find k : key๊ฐ€ k์ธ ์Œ์ด treemap์— ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์žˆ๋‹ค๋ฉด ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์—†๋‹ค๋ฉด None์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. print_list : treemap์— ์žˆ๋Š” ์Œ๋“ค์„ key ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•˜์—ฌ ๊ฐ value ๊ฐ’๋“ค๋งŒ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ treemap์ด ๋น„์–ด์žˆ๋‹ค..

728x90