ALGORITHM ๐Ÿค–/Baekjoon

๋ฐฑ์ค€ - 2460

daxx0ne 2023. 9. 26. 15:02

๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/2460

 

2460๋ฒˆ: ์ง€๋Šฅํ˜• ๊ธฐ์ฐจ 2

์ตœ๊ทผ์— ๊ฐœ๋ฐœ๋œ ์ง€๋Šฅํ˜• ๊ธฐ์ฐจ๊ฐ€ 1๋ฒˆ์—ญ(์ถœ๋ฐœ์—ญ)๋ถ€ํ„ฐ 10๋ฒˆ์—ญ(์ข…์ฐฉ์—ญ)๊นŒ์ง€ 10๊ฐœ์˜ ์ •์ฐจ์—ญ์ด ์žˆ๋Š” ๋…ธ์„ ์—์„œ ์šดํ–‰๋˜๊ณ  ์žˆ๋‹ค. ์ด ๊ธฐ์ฐจ์—๋Š” ํƒ€๊ฑฐ๋‚˜ ๋‚ด๋ฆฌ๋Š” ์‚ฌ๋žŒ ์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜๊ฐ€ ์žˆ๋‹ค.

www.acmicpc.net

 

ํ’€๊ธฐ ์ „์— ์•„์ด๋””์–ด

๊ธฐ์ฐจ๋Š” ์ด 10๊ฐœ์˜ ์ •์ฐจ์—ญ์ด ์žˆ๋Š” ๋…ธ์„ ์—์„œ ์šดํ–‰๋˜๊ณ  ์žˆ๋‹ค. -> for๋ฌธ์œผ๋กœ 10๋ฒˆ ๋Œ๋ ค์„œ ๋‚ด๋ฆฌ๊ณ  ํƒ„ ์‚ฌ๋žŒ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์•ผ๊ฒ ๋‹ค.

๋‚ด๋ฆด ์‚ฌ๋žŒ์ด ๋ชจ๋‘ ๋‚ด๋ฆฌ๊ณ  ํƒ„๋‹ค. -> ์–ด์จŒ๋“  ํ•œ ์—ญ์—์„œ (ํƒ„ ์‚ฌ๋žŒ ์ˆ˜ - ๋‚ด๋ฆฐ ์‚ฌ๋žŒ ์ˆ˜)๋ฅผ ์ฒดํฌํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

์—ญ ๋ฒˆํ˜ธ ์ˆœ์„œ๋Œ€๋กœ ์šดํ–‰๋œ๋‹ค. -> ์ž…๋ ฅ๋ฐ›์€ ์ˆœ์„œ๋Œ€๋กœ ๊ธฐ์ฐจ์— ํƒ„ ์‚ฌ๋žŒ์ด ๋ช‡ ๋ช…์ธ์ง€ ์„ธ๋ณด์ž.

 

 

๊ธฐ์ฐจ์— ์‚ฌ๋žŒ์ด ๊ฐ€์žฅ ๋งŽ์„ ๋•Œ์˜ ์‚ฌ๋žŒ ์ˆ˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋ฉด 1๋ฒˆ ์ •์ฐจ์—ญ์—์„œ ๊ฐ€์žฅ ๋งŽ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ ์‚ฌ๋žŒ ์ˆ˜๋ฅผ ์ €์žฅํ•ด ๋‘ฌ์•ผ๊ฒ ๋‹ค. ๊ทธ๋‹ค์Œ์— ์ •์ฐจ์—ญ์„ ์ง€๋‚  ๋•Œ๋งˆ๋‹ค ์ €์žฅํ•ด ๋‘” ์‚ฌ๋žŒ ์ˆ˜๋ž‘ ๋น„๊ตํ•ด์„œ ๋” ๋งŽ์•„์ง€๋ฉด ๊ฐ’์„ ๋‹ค์‹œ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์•„๋‹ˆ๋ฉด ์•ˆ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋˜๊ฒ ๋„ค~!

 

๊ณผ์ •

์šฐ์„  ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ, ์›๋ž˜ ๊ฐ™์œผ๋ฉด ๋ฐ”๋กœ Scanner๋กœ ์‹œ์ž‘.. ํ–ˆ๊ฒ ์ง€๋งŒ ์ •๋ง ์ต์ˆ™ํ•˜์ง€ ์•Š์€ BufferdReader๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

BufferdReader๊ฐ€ ์ง„์งœ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•œ๋‹ค! ์–ด๋ ค์šด ๋ฌธ์ œ ํ’€๋‹ค ๋ณด๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ ๋‚˜์„œ ํ†ต๊ณผ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ ๊ทธ๋•Œ๋งŒ ์จ๋ณด๋‹ค๊ฐ€.. ์ด๋ ‡๊ฒŒ ๋‹ค์‹œ ์‚ฌ์šฉ์„ ํ•ด๋ณธ๋‹ค.. (์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๊ฑด ๋‹ค ์–ด๋ ค์šด ๊ฑฐ์•ผ..) 

 

 

<์ž…/์ถœ๋ ฅ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•>

  • ์ž…๋ ฅ: BufferdReader, StringTokenizer
  • ์ถœ๋ ฅ: StringBuilder

 

 

์จ‹๋“ ! BufferdReader๊ฐ€ Scanner๋ณด๋‹ค ๋น ๋ฅธ ์ด์œ ๋Š” ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Scanner๋Š” ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅํ•˜๋ฉด ๋ฐ”๋กœ ์ „๋‹ฌ๋˜๋Š”๋ฐ, ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅ๋œ ๋ฌธ์ž ํ•˜๋‚˜์”ฉ ์ €์žฅํ•ด ๋’€๋‹ค๊ฐ€ ํ•œ ๋ฒˆ์— ์ „์†กํ•˜๋Š” ๊ฑฐ๋ผ์„œ ๋น ๋ฅธ ๊ฒƒ์ด๋‹ค!

 

 

BufferdReader๋ฅผ ์“ฐ๋ฉด 'throws IOException'์„ ๋ถ™์—ฌ์ค˜์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฑฐ ์™œ ๋ถ™์ด๋‚˜ ์‹ถ์–ด์„œ ๊ฒ€์ƒ‰ํ•ด ๋ณด์•˜๋‹ค.

 

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด ๋‹ค์–‘ํ•œ ํƒ€์ž…์œผ๋กœ ๋“ค์–ด์˜ฌ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์ž˜๋ชป๋œ ๊ฐ’์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ์— ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋„๋ก ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. Scanner๋ฅผ ์“ธ ๋•Œ ์ €๊ฒŒ ํ•„์š” ์—†๋Š” ์ด์œ ๋Š” ๋‚ด๋ถ€์—์„œ try-catch๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

์ด์ œ BufferReader์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด ๋ดค์œผ๋‹ˆ๊นŒ ์ง์ ‘ ์‚ฌ์šฉ์„ ํ•ด๋ด์•ผ ํ•˜๋Š”๋ฐ.. ์ฒ˜์Œ์—๋Š” ใ…‹ใ…‹ใ…‹ใ…‹

int getOff = br.read();

์ด๋ ‡๊ฒŒ ์ผ๋Š”๋ฐ ใ…‹ใ…‹์•„๋‹ˆ ๊ฐ’์ด ์ด์ƒํ•˜๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฑฐ ใ…œใ…œ ๋งค์šฐ ๋‹นํ™ฉ.. ๊ทธ๋ž˜์„œ ๋””๋ฒ„๊น…์„ ํ•ด๋ดค๋Š”๋ฐ ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ์ˆซ์ž๋ž‘ ๋‹ค๋ฅธ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฑฐ.. ๋А๋‚Œ์ด ์‹ธํ–ˆ๋‹ค. ๋˜ ๊ตฌ๊ธ€๋ง์„ ํ–ˆ๋‹ค.

 

์•Œ๊ณ  ๋ณด๋‹ˆ read() ๋ฉ”์„œ๋“œ๋Š” ๊ฐ’์„ ์ฝ์„ ๋•Œ int ๊ฐ’์œผ๋กœ ๋ณ€ํ˜•ํ•˜์—ฌ ์ฝ์–ด์˜ค๋Š” ๊ฑฐ๋ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒŒ ๋ฌด์Šจ ์†Œ๋ฆฌ๋ƒ๋ฉด ๋‚ด๊ฐ€ 1์„ ์ž…๋ ฅํ•˜๋ฉด intํ˜• ์ˆซ์ž 1์„ ์ฝ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์•„์Šคํ‚ค ํ˜•์‹์˜ ๋ฌธ์ž๊ฐ’ 1์„ ์ฝ์–ด์˜ค๋Š” ๊ฑฐ๋ผ์„œ ๊ฒฐ๊ตญ 49๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ฑฐ์˜€๋‹ค. ์ด๊ฒƒ๋„ ๋ฌธ์ œ๊ณ  ๋‚ด๋ฆฌ๋Š” ์‚ฌ๋žŒ, ํƒ€๋Š” ์‚ฌ๋žŒ์„ ๊ฐ๊ฐ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์ด์ƒํ•˜๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฑฐ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋ฅผ Scanner ์‚ฌ์šฉํ•ด์„œ ๋Œ๋ฆฌ๋ฉด ์˜ˆ์ œ ์ฝ”๋“œ ์ถœ๋ ฅ์ด๋ž‘ ๊ฐ™๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ ์œ„ ๋ฐฉ์‹๋Œ€๋กœ ํ•ด๋ณด๋ฉด ์ด์ƒํ•˜๊ฒŒ ๋‚˜์™€์„œ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์ข‹์€ ๊ฒฝํ—˜ ํ–ˆ๋‹ค(^_^)

 

 

๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ œ๋Œ€๋กœ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ์„๊นŒ? ๊ณต๋ถ€๋ฅผ ํ•ด ๋ณธ ๊ฒฐ๊ณผ BufferedReader๋Š” ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— Integer.parseInt๋ฅผ ํ†ตํ•ด ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜๋กœ ๋ณ€ํ™˜ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

String[] input = br.readLine().split(" ");
int getOff = Integer.parseInt(input[0]);
int getOn = Integer.parseInt(input[1]);

์˜ˆ์ œ ์ž…๋ ฅ์ด 0, 32 ์ด๋Ÿฐ ์‹์ธ๋ฐ ์ด๊ฑธ ํ•œ ์ค„์„ ๋‹ค ์ฝ๊ณ , ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด input ๋ฐฐ์—ด์— ์ €์žฅ์ด ๋˜๊ณ  [0, 32] ์ด๋ ‡๊ฒŒ ์ €์žฅ์ด ๋˜๋Š” ๊ฑฐ์ง€! ๊ทธ๋ž˜์„œ ๋‚ด๋ฆฐ ์‚ฌ๋žŒ์€ input ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ, ํƒ„ ์‚ฌ๋žŒ์€ ๋ฐฐ์—ด์˜ ๋‘ ๋ฒˆ์งธ ๊ฐ’์œผ๋กœ ์ง€์ •ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

 

 

๊ทผ๋ฐ ์œ„ ๋ฐฉ๋ฒ• ๋ง๊ณ ๋„ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ๋‚ฌ๋‹ค.

 

 

StringTokenizer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์˜€๋‹ค. ์ด๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด split ๋ฉ”์„œ๋“œ๋กœ ๋ฌธ์ž์—ด์„ ๋‚˜๋ˆ„๋Š” ๊ฑฐ๋ณด๋‹ค ๋น ๋ฅด๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๊ฑฐ ๋ง๊ณ ๋„ ๋ญ ๊ตฌ๋ถ„์ž ์ง€์ •์ด ๊ฐ€๋Šฅํ•ด์„œ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๊ฒŒ ๊ทนํ•œ์˜ ํšจ์œจ์ถฉ..?

StringTokenizer st = new StringTokenizer(br.readLine());
int getOff = Integer.parseInt(st.nextToken());
int getOn = Integer.parseInt(st.nextToken());

์ด๊ฒƒ๋„ ๊ฒฐ๊ตญ br๋กœ ํ•œ ์ค„ ์ฝ๊ณ , ๋”ฐ๋กœ ๋ถ„ํ•  ๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค! ๊ทธ๋ฆฌ๊ณ  nextToken() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ถ„ํ• ๋œ ๋ฌธ์ž์—ด ํ•˜๋‚˜๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‹ ๊ธฐ๋ฐฉ๊ธฐํ•จ๋‹ˆ๋‹ค.

 

 

๊ทธ๋ž˜์„œ ์ด์ œ ๋ฌธ์ œ ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋ƒ๋ฉด..

 

๋‚ด๊ฐ€ ํ’€๊ธฐ ์ „์— ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•๋Œ€๋กœ ํ˜„์žฌ ๊ธฐ์ฐจ์— ํƒ„ ์Šน๊ฐ ์ˆ˜๋ฅผ count๋กœ ์ง€์ •ํ•ด ๋‘๊ณ , ์ œ์ผ ๋งŽ์ด ํƒ”์„ ๋•Œ๋ž‘ ๊ณ„์† ๋น„๊ตํ•ด ๊ฐ€๋ฉด์„œ ์ œ์ผ ์‚ฌ๋žŒ ๋งŽ์„ ๋•Œ์˜ count๋ฅผ maxNum์— ์—…๋ฐ์ดํŠธํ•ด ์ฃผ์—ˆ๋‹ค.

 

 

tmi: StringBuilder๋Š” ๋‚˜์ค‘์— ์จ๋ณผ๊ฒŒ์š”..

 

์‹œ๊ฐ„ ๋ณต์žก๋„

: O(1)

 

์•ฝ๊ฐ„ ๊ถ๊ธˆํ•œ ๊ฒŒ ์ƒ๊ธด ๊ฒƒ์ด์•ผ

  • Scanner ์‚ฌ์šฉ
  • BufferdReader ์‚ฌ์šฉ
  • BufferdReader + StringTokenizer ์‚ฌ์šฉ

 

์ด๋ ‡๊ฒŒ 3๊ฐ€์ง€ ์ผ€์ด์Šค๋กœ ์ œ์ถœํ•ด ๋ดค๋Š”๋ฐ, ์™€ ์ง„์งœ ๋ฉ”๋ชจ๋ฆฌ๋ž‘ ์‹œ๊ฐ„ ํŒํŒ ์ค„์–ด๋“œ๋Š” ๊ฑฐ ์‹ ๊ธฐํ•˜๋‹ค!! ํ™•์‹คํžˆ BufferReader๊ฐ€ ์ง„์งœ ์†๋„๊ฐ€ ๋น ๋ฅด๊ธด ํ•˜๋‚˜๋ณด๋‹ค. ์ด๋ฒˆ ๋ฌธ์ œ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•ด์„œ ๊ทธ๋ ‡์ง€ ๋ณต์žกํ•œ ์ฝ”๋“œ์—์„œ๋Š” ์—„์ฒญ๋‚œ ํšจ์œจ์„ ์ž๋ž‘ํ•  ๊ฒƒ ๊ฐ™๋‹ค.. ๋นจ๋ฆฌ ์นœํ•ด์ง€์ž ๋‚˜๋ž‘..๐Ÿฅน

 

์ „์ฒด ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int maxNum = 0;
        int count = 0;
        for (int i = 0; i < 10; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int getOff = Integer.parseInt(st.nextToken());
            int getOn = Integer.parseInt(st.nextToken());
            count += getOn - getOff;
            if (maxNum < count) {
                maxNum = count;
            }
        }
        System.out.println(maxNum);
    }
}