๋ชฉ์ฐจ
ํ์ด์ฌ '์ฐ์ฐจํด๊ฐ์ผ์ ๊ณ์ฐ๊ธฐ' ๋ง๋ค๊ธฐ
์ง์ฅ์์ ์ฐ์ฐจ ํด๊ฐ๋ ์ง์๋ค์ ์ค์ํ ๊ถ๋ฆฌ์ ๋๋ค. ํ์ง๋ง ์ฐ์ฐจ๋ฅผ ๊ณ์ฐํ๋ ์ผ์ด ์ข ์ข ๋ฒ๊ฑฐ๋กญ๊ณ ๋ณต์กํ๊ฒ ๋๊ปด์ง ์ ์์ต๋๋ค. ์ด๋ฅผ ๋๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ํ์ด์ฌ์ ์ฌ์ฉํด ์ฐ์ฐจํด๊ฐ์ผ์๋ฅผ ์ฝ๊ฒ ๊ณ์ฐํ ์ ์๋ '์ฐ์ฐจํด๊ฐ์ผ์ ๊ณ์ฐ๊ธฐ'๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์ด ์ฐ์ฐจํด๊ฐ์ผ์ ๊ณ์ฐ๊ธฐ ํ๋ก๊ทธ๋จ์ ์ ์ฌ์ผ์ ๊ธฐ์ค์ผ๋ก ์ฐ์ฐจํด๊ฐ๋ฅผ ์๋์ผ๋ก ๊ณ์ฐํ์ฌ ๋ณต์กํ ์์์ ๋์ ํด์ค ๊ฒ์ ๋๋ค. ์ด ๊ธ์์๋ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํ๊ณ , ๊ทธ ํ์ฉ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ฐจํด๊ฐ ๊ณ์ฐ ๊ท์น ์ดํดํ๊ธฐ
๋จผ์ ์ฐ์ฐจํด๊ฐ ๊ณ์ฐ์ ๊ธฐ๋ณธ ๊ท์น์ ์์์ผ ํฉ๋๋ค. ๋ํ๋ฏผ๊ตญ ๊ทผ๋ก๊ธฐ์ค๋ฒ์ ๋ฐ๋ฅด๋ฉด ์ฐ์ฐจํด๊ฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ถ์ฌ๋ฉ๋๋ค.
- ์ ์ฌ ํ 1๋ ๋ฏธ๋ง: ๋งค๋ฌ ๊ฐ๊ทผ ์ 1์ผ์ ์ ๊ธํด๊ฐ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ์ ์ฌ ํ 1๋ ์ด์: 1๋ ๋์ 80% ์ด์ ์ถ๊ทผ ์, ์ฐ๊ฐ 15์ผ์ ์ฐ์ฐจํด๊ฐ๊ฐ ๋ฐ์ํฉ๋๋ค.
- 3๋ ์ด์ ๊ทผ๋ฌด ์: 2๋ ๋ง๋ค 1์ผ์ฉ ์ถ๊ฐ ์ฐ์ฐจ๊ฐ ๋ถ์ฌ๋ฉ๋๋ค.
์ด๋ฌํ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋ก ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํด๋ด ์๋ค.
๊ณ์ฐ๊ธฐ ์ค๊ณ ๋ฐ ํ์ด์ฌ ์ฝ๋ ์์ฑ
์ฐ์ฐจํด๊ฐ ๊ณ์ฐ๊ธฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ์๋ก๋ถํฐ ์ ์ฌ์ผ๊ณผ ๊ทผ์์ฐ์๋ฅผ ์ ๋ ฅ๋ฐ์์ผ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฐ์ฐจํด๊ฐ ์ผ์๋ฅผ ๊ณ์ฐํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
from datetime import datetime
def calculate_annual_leave(join_date_str):
# ์
์ฌ์ผ ์
๋ ฅ ๋ฐ๊ธฐ
join_date = datetime.strptime(join_date_str, "%Y-%m-%d")
today = datetime.today()
# ๊ทผ์์ฐ์ ๊ณ์ฐ
total_days = (today - join_date).days
years_of_service = total_days // 365
# ์ฐ์ฐจ ๊ณ์ฐ
if years_of_service < 1:
# 1๋
๋ฏธ๋ง์ผ ๊ฒฝ์ฐ ๋งค๋ฌ ๊ฐ๊ทผ ์ 1์ผ์ฉ ๋ถ์ฌ
annual_leave = min(11, total_days // 30)
else:
# 1๋
์ด์์ผ ๊ฒฝ์ฐ ๊ธฐ๋ณธ 15์ผ + 2๋
๋ง๋ค 1์ผ ์ถ๊ฐ
annual_leave = 15 + (years_of_service - 1) // 2
return annual_leave
# ์ฌ์ฉ์ ์
๋ ฅ
join_date_str = input("์
์ฌ์ผ์ ์
๋ ฅํ์ธ์ (YYYY-MM-DD): ")
annual_leave_days = calculate_annual_leave(join_date_str)
print(f"ํ์ฌ๊น์ง ๋ฐ์ํ ์ฐ์ฐจํด๊ฐ ์ผ์: {annual_leave_days}์ผ")
์ฝ๋ ์ค๋ช
์ด์ ์ ์ฝ๋๋ฅผ ํ๋์ฉ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- ์
์ฌ์ผ ์
๋ ฅ ๋ฐ ๊ทผ์์ฐ์ ๊ณ์ฐ
datetime
๋ชจ๋์ ์ฌ์ฉํด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ์ฌ์ผ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ๋ ์ง๊น์ง์ ์ผ์๋ฅผ ๊ณ์ฐํฉ๋๋ค.total_days
๋ณ์๋ ์ ์ฌ ํ ์ด ๊ทผ์์ผ์๋ฅผ ๋ํ๋ ๋๋ค. - ๊ทผ์์ฐ์์ ๋ฐ๋ฅธ ์ฐ์ฐจ ๊ณ์ฐ
years_of_service
๋ณ์๋ฅผ ํตํด ๊ทผ์์ฐ์๋ฅผ ๊ตฌํ๊ณ , ์ด์ ๋ฐ๋ผ ์ฐ์ฐจํด๊ฐ๋ฅผ ๊ณ์ฐํฉ๋๋ค.- 1๋ ๋ฏธ๋ง์ ๊ฒฝ์ฐ ๋งค๋ฌ ๊ฐ๊ทผ ์ 1์ผ์ ํด๊ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๋ ์ต๋ ์ฐ์ฐจ๋ 11์ผ๋ก ์ ํ๋ฉ๋๋ค.
- 1๋ ์ด์ ๊ทผ์ํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ 15์ผ์ ์ฐ์ฐจ๋ฅผ ๋ถ์ฌํ๋ฉฐ, ์ดํ ๋งค 2๋ ๋ง๋ค 1์ผ์ฉ ์ถ๊ฐ ๋ถ์ฌํฉ๋๋ค.
- ๊ฒฐ๊ณผ ์ถ๋ ฅ
์ต์ข ์ ์ผ๋ก ๊ณ์ฐ๋ ์ฐ์ฐจํด๊ฐ ์ผ์๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ ค์ค๋๋ค.
์ฝ๋ ํ์ฅ ๋ฐ ๊ฐ์ ๋ฐฉ๋ฒ
์ด ๊ธฐ๋ณธ์ ์ธ ์ฐ์ฐจํด๊ฐ ๊ณ์ฐ๊ธฐ๋ฅผ ๋์ฑ ํ์ฅํ์ฌ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณผ ์ ์์ต๋๋ค.
- ์ถ์๋ฅ ๋ฐ์
๊ทผ๋ก๊ธฐ์ค๋ฒ์ ๋ฐ๋ผ 1๋ ๋์ 80% ์ด์์ ์ถ๊ทผ์จ์ ๋ฌ์ฑํด์ผ ์ฐ์ฐจํด๊ฐ๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ์ด๋ฅผ ๊ณ์ฐ๊ธฐ์์ ๊ณ ๋ คํ ์ ์๋๋ก, ์ถ๊ทผ์จ ์ ๋ ฅ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณผ ์ ์์ต๋๋ค. - ์ง๊ธ๋ณ/๊ทผ๋ก์กฐ๊ฑด๋ณ ๊ท์น ๋ฐ์
ํ์ฌ๋ง๋ค ์ฐ์ฐจ ๋ถ์ฌ ๊ท์ ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ณ์ฝ์ง, ์ ๊ท์ง, ํํธํ์ ๋ฑ ๊ทผ๋ก ํํ์ ๋ฐ๋ผ ์ฐ์ฐจ ๋ถ์ฌ ๋ฐฉ์์ด ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํ์ฌ ๋ค์ํ ๊ทผ๋ก์กฐ๊ฑด์ ์ง์ํ๋๋ก ํ์ฅํ ์ ์์ต๋๋ค. - ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI) ์ถ๊ฐ
์ฌ์ฉ์ ์นํ์ ์ธ ํ๋ก๊ทธ๋จ์ ์ํดtkinter
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ GUI๋ฅผ ์ถ๊ฐํ๋ฉด, ํ์ด์ฌ์ ์ ๋ชจ๋ฅด๋ ์ฌ์ฉ์๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ฐ์ฐจ ๊ณ์ฐ๊ธฐ๋ก ๋ฐ์ ํ ์ ์์ต๋๋ค.
ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉํ๊ธฐ
๋์ฑ ํจ์จ์ ์ผ๋ก ์ฐ์ฐจ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ํ์ด์ฌ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, pandas
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉด์ ๊ฐ ์ง์์ ์ฐ์ฐจํด๊ฐ๋ฅผ ์๋์ผ๋ก ๊ณ์ฐํ๊ณ ์ถ๋ ฅํ ์ ์์ต๋๋ค. ์ด๋ ์ธ์ฌํ์์ ์ฌ๋ฌ ์ง์์ ์ฐ์ฐจ๋ฅผ ํ๊บผ๋ฒ์ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
import pandas as pd
from datetime import datetime
# ์ง์ ๋ฐ์ดํฐ ์์
data = {
'์ด๋ฆ': ['๊น์ฒ ์', '์ด์ํฌ', '๋ฐ๋ฏผ์'],
'์
์ฌ์ผ': ['2021-06-01', '2020-03-15', '2019-11-20']
}
df = pd.DataFrame(data)
def calculate_leave(join_date_str):
join_date = datetime.strptime(join_date_str, "%Y-%m-%d")
today = datetime.today()
total_days = (today - join_date).days
years_of_service = total_days // 365
if years_of_service < 1:
return min(11, total_days // 30)
else:
return 15 + (years_of_service - 1) // 2
# ์ฐ์ฐจ ๊ณ์ฐ
df['์ฐ์ฐจํด๊ฐ์ผ์'] = df['์
์ฌ์ผ'].apply(calculate_leave)
print(df)
์ด ์ฝ๋๋ ์ง์๋ค์ ์ ์ฌ์ผ์ ๋ฐํ์ผ๋ก ๊ฐ์์ ์ฐ์ฐจํด๊ฐ ์ผ์๋ฅผ ๊ณ์ฐํ์ฌ ๋ฐ์ดํฐํ๋ ์์ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ด ๊ธฐ์ ์ธ์ฌ ๋ด๋น์์๊ฒ ํฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ด๋ฒ ํฌ์คํ
์์๋ ํ์ด์ฌ์ ํ์ฉํ '์ฐ์ฐจํด๊ฐ์ผ์ ๊ณ์ฐ๊ธฐ'๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ฐ์ฐจํด๊ฐ ๊ณ์ฐ์ ๋ฒ์ ์๊ฑด๊ณผ ํ์ฌ์ ์ ์ฑ
์ ์ดํดํด์ผ ํ๋ ๋ณต์กํ ๊ณผ์ ์ผ ์ ์์ง๋ง, ํ์ด์ฌ์ ํ์ฉํ๋ฉด ์ด๋ฅผ ๊ฐ๋จํ๊ฒ ์๋ํํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ธ ํ์ด์ฌ ์ฝ๋๋ถํฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ pandas
ํ์ฉ๊น์ง, ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ์ฐจ ๊ณ์ฐ์ ํ ์ ์์์ ํ์ธํ์์ต๋๋ค.
์ง์ฅ ๋ด ํจ์จ์ฑ์ ๋์ด๊ณ , ์ง์๋ค์ ๊ถ๋ฆฌ๋ฅผ ์ ํํ ์งํค๊ธฐ ์ํด ์ด๋ฌํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ณด๋ ๊ฒ์ ๋งค์ฐ ์๋ฏธ ์๋ ์ผ์ ๋๋ค. ์ด๋ฒ ๊ธฐํ์ ํ์ด์ฌ์ ์ฌ์ฉํ์ฌ ์ฐ์ฐจ ๊ณ์ฐ์ ์๋ํํด ๋ณด์ธ์. ์ฌ๋ฌ๋ถ์ ์ ๋ฌด ํจ์จ์ฑ์ด ํ ๋จ๊ณ ๋ ์ฌ๋ผ๊ฐ ๊ฒ์ ๋๋ค.
๋๊ธ