MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 1308๋ฒˆ: D-Day ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 1308๋ฒˆ: D-Day

MUKER 2023. 8. 17. 00:05
๋ฌธ์ œ ๋งํฌ
 

1308๋ฒˆ: D-Day

์ฒซ์งธ ์ค„์— ์˜ค๋Š˜์˜ ๋‚ ์งœ๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๋‘ ๋ฒˆ์งธ ์ค„์— D-Day์ธ ๋‚ ์˜ ๋‚ ์งœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‚ ์งœ๋Š” ์—ฐ๋„, ์›”, ์ผ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์ž…๋ ฅ ๋ฒ”์œ„๋Š” 1๋…„ 1์›” 1์ผ๋ถ€ํ„ฐ 9999๋…„ 12์›” 31์ผ ๊นŒ์ง€ ์ด๋‹ค.

www.acmicpc.net


 

๋ฌธ์ œ

์บ ํ”„์— ์˜ค๊ฒŒ ๋œ ์†ก์œ ์ง„์€ ์บ ํ”„๊ฐ€ ๋„ˆ๋ฌด ์ง€๋ฃจํ•ด์„œ ์˜ค๋Š˜๋กœ๋ถ€ํ„ฐ ์บ ํ”„๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋ฉฐ์น ์ด๋‚˜ ๋‚จ์•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์บ ํ”„๋Š” ๋น„์ƒ์‹์ ์œผ๋กœ ๊ธธ์ง€๋„ ๋ชฐ๋ผ์„œ (์œค๋…„์„ ํฌํ•จํ• ์ง€๋„ ๋ชจ๋ฅธ๋‹ค) ์†์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ธ๊ธฐ์—๋Š” ํž˜๋“ค์–ด ๋ณด์˜€๋‹ค.

๋”์šฑ ์ •ํ™•ํ•œ ๊ณ„์‚ฐ์„ ์œ„ํ•ด, ์œ ์ง„์ด๋Š” ์œค๋…„์ด ์ •ํ•ด์ง€๋Š” ๊ธฐ์ค€์„ ์ฐพ์•„๋ณด์•˜๊ณ , ๊ทธ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

  • ์„œ๋ ฅ๊ธฐ์› ์—ฐ์ˆ˜๊ฐ€ 4๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ํ•ด๋Š” ์šฐ์„  ์œค๋…„์œผ๋กœ ํ•œ๋‹ค. (2004๋…„, 2008๋…„, …)
  • 100์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ํ•ด๋Š” ํ‰๋…„์œผ๋กœ ํ•œ๋‹ค. (2100๋…„, 2200๋…„, …)
  • 400์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š” ํ•ด๋Š” ๋‹ค์‹œ ์œค๋…„์œผ๋กœ ํ•œ๋‹ค. (1600๋…„, 2000๋…„, …)

๊ทธ๋Ÿฐ๋ฐ ์บ ํ”„๊ฐ€ ๋„ˆ๋ฌด ๊ธธ ๊ฒฝ์šฐ, ์‚ฌ์ถ˜๊ธฐ์ธ ์œ ์ง„์ด๋Š” ์บ ํ”„์— ๋ฌด๋‹จ์œผ๋กœ ๋น ์งˆ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์˜ค๋Š˜์˜ ๋‚ ์งœ๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๋‘ ๋ฒˆ์งธ ์ค„์— D-Day์ธ ๋‚ ์˜ ๋‚ ์งœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‚ ์งœ๋Š” ์—ฐ๋„, ์›”, ์ผ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์ž…๋ ฅ ๋ฒ”์œ„๋Š” 1๋…„ 1์›” 1์ผ๋ถ€ํ„ฐ 9999๋…„ 12์›” 31์ผ ๊นŒ์ง€ ์ด๋‹ค. ์˜ค๋Š˜์˜ ๋‚ ์งœ๋Š” ํ•ญ์ƒ D-Day๋ณด๋‹ค ์•ž์— ์žˆ๋‹ค.

์ถœ๋ ฅ

์˜ค๋Š˜๋ถ€ํ„ฐ D-Day๊นŒ์ง€ x์ผ์ด ๋‚จ์•˜๋‹ค๋ฉด, "D-"๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ ๋’ค์— ๊ณต๋ฐฑ ์—†์ด x๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์บ ํ”„๊ฐ€ ์ฒœ๋…„ ์ด์ƒ ์ง€์†๋œ๋‹ค๋ฉด (์˜ค๋Š˜์ด y๋…„ m์›” d์ผ์ด๊ณ , D-Day๊ฐ€ y+1000๋…„ m์›” d์ผ๊ณผ ๊ฐ™๊ฑฐ๋‚˜ ๋Šฆ๋‹ค๋ฉด) ๋Œ€์‹  "gg"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์˜ค๋Š˜์ด 2์›” 29์ผ์ธ ๊ฒฝ์šฐ๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ์ œ


์„ฑ๊ณต ํ’€์ด

let numOfDay = [0,31,28,31,30,31,30,31,31,30,31,30]

func checkLeapYear(_ year: Int) -> Bool {
	if year % 400 == 0 { return true }
	if year % 100 == 0 { return false }
	if year % 4 == 0 { return true }
	else { return false }
}

func totalDay(_ dateStr: String) -> Int {
	let date = dateStr.split { $0 == " " }.map { Int($0)! }
	var day = 0
	for y in 1...date[0] {
		if y == date[0] {
			day += numOfDay[0..<date[1]].reduce(0,+)
			day += date[2]
			if checkLeapYear(y) && date[1] > 2 { day += 1 }
		} else {
			day += checkLeapYear(y) ? 366 : 365
		}
	}
	return day
}
let now = totalDay(readLine()!)
let dday = totalDay(readLine()!)
let interval = dday-now
print(interval >= 365243 ? "gg" : "D-\(interval)")

ํ’€์ด ํ‚ค์›Œ๋“œ

  • ์ฒซ ํ’€์ด ์‹œ๋„์—์„œ Calendar๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ์—ˆ๋Š”๋ฐ.. ํ•ด๋‹น๋ฌธ์ œ๋งŒ ๊ทธ๋Ÿฐ๊ฑด์ง€ ๋ฐฑ์ค€ ๋ฌธ์ œ ๋ชจ๋‘ ๊ทธ๋Ÿฐ๊ฑด์ง€ Calendar์‚ฌ์šฉ์ด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋กœ ์ด์–ด์ง€๋Š”๊ฑธ๋กœ ํ™•์ธํ•˜๊ณ  ์ง์ ‘ ์œค๋…„๊ณผ ์ผ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ํ’€์—ˆ๋‹ค.
  • ๋ฌธ์ œ ํ’€์ด์—์„œ ๊ฐ„๊ณผํ•œ๊ฒŒ ์žˆ๋‹ค๋ฉด 1000๋…„์€ 3650000์ผ์ด ์•„๋‹ˆ๋ผ 365243์ผ์ด์—ˆ๋‹ค๋Š” ์ ์ด ์›ƒ๊ธฐ๊ณ  ์–ต์šธํ–ˆ๋‹ค..ใ