Skip to content

Latest commit

ย 

History

History
680 lines (540 loc) ยท 20 KB

week_06.md

File metadata and controls

680 lines (540 loc) ยท 20 KB

6์ฃผ์ฐจ-๊ธฐ์ดˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด 1


Git

  • ์„ค์น˜

  • ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์Šค๊ฐ€ ๊ฐœ๋ฐœํ•œ ๋ถ„์‚ฐํ˜• ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(VCS)

  • ๋งค์šฐ ๋น ๋ฅธ ์†๋„์™€ ๋ถ„์‚ฐํ˜• ์ €์žฅ์†Œ ์ง€์›

  • Git์˜ ์ž‘์—… ํด๋”๋Š” ์ „์ฒด ๊ธฐ๋ก๊ณผ ๊ฐ ๊ธฐ๋ก์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ

  • ์ž‘์—…์ด ๋๋‚˜๋ฉด Git ์›๊ฒฉ ์ €์žฅ์†Œ๋กœ ๋‹ค์‹œ ๋ฐœํ–‰(commit, push)

    • ๋ฉ”์ธ ์ €์žฅ์†Œ์™€ ํ•ฉ์น˜๊ธฐ(merge) ์ „ ๋ฉ”์ธ ์ €์žฅ์†Œ์™€ ๊ฒฉ๋ฆฌ์‹œํ‚ค๊ณ  ๋”ฐ๋กœ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ง€(branch)๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฐ€์ง€์˜ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋˜๋ฉด ๋ฉ”์ธ ์ €์žฅ์†Œ์™€ ํ•ฉ์น˜๊ณ  ๊ฐ€์ง€๋Š” ์‚ญ์ œ์‹œํ‚ค๋Š” ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Git ๋ช…๋ น์–ด(์ฐธ์กฐ)

์‹ ์ž…์ด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด

# ์‚ฌ์šฉ์ž ์„ค์ •
git config --global user.name โ€œYour nameโ€
git config --global user.email โ€œYour email addressโ€
# git ๋””๋ ‰ํ† ๋ฆฌ ์„ค์ •
mkdir "/๊ฒฝ๋กœ/"newDir
cd "/๊ฒฝ๋กœ/"newDir
git init # ๋˜๋Š” ๋ฐ”๋กœ ํด๋ก 
# ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ์ €์žฅ์†Œ ๋ณต์ œ
git clone <์ €์žฅ์†Œ url>
# ๋ณ€๊ฒฝํ•œ ํŒŒ์ผ commit stage์— ์ถ”๊ฐ€
git add <ํŒŒ์ผ>
# ๋ณ€๊ฒฝ ๋‚ด์šฉ ์ปค๋ฐ‹
git commit -m โ€œ<๋ฉ”์‹œ์ง€>โ€
# ๋ณ€๊ฒฝ ๋‚ด์šฉ ํ‘ธ์‰ฌ
git push

์„ค์ •๊ณผ ์ดˆ๊ธฐํ™”

  • ์ „์—ญ ์‚ฌ์šฉ์ž๋ช…/์ด๋ฉ”์ผ ๊ตฌ์„ฑํ•˜๊ธฐ

    git config --global user.name โ€œYour nameโ€
    git config --global user.email โ€œYour email addressโ€
  • ์ €์žฅ์†Œ๋ณ„ ์‚ฌ์šฉ์ž๋ช…/์ด๋ฉ”์ผ ๊ตฌ์„ฑํ•˜๊ธฐ (ํ•ด๋‹น ์ €์žฅ์†Œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ›„)

    git config user.name โ€œYour nameโ€
    git config user.email โ€œYour email addressโ€
    # user ์„ค์ •์ด ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด github์˜ commit ์ง‘๊ณ„๊ฐ€ ๋˜์ง€ ์•Š์Œ
  • ์ „์—ญ ์„ค์ • ์ •๋ณด ์กฐํšŒ

    git config --global --list
  • ์ €์žฅ์†Œ๋ณ„ ์„ค์ • ์ •๋ณด ์กฐํšŒ

    git config --list
  • Git์˜ ์ถœ๋ ฅ๊ฒฐ๊ณผ ์ƒ‰์ƒ ํ™œ์„ฑํ™”ํ•˜๊ธฐ

    git config --global color.ui โ€œautoโ€
  • ์ƒˆ๋กœ์šด ์ €์žฅ์†Œ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ

    mkdir "/๊ฒฝ๋กœ/"newDir
    cd "/๊ฒฝ๋กœ/"newDir
    git init
  • ์ €์žฅ์†Œ ๋ณต์ œํ•˜๊ธฐ

    git clone <์ €์žฅ์†Œ url>
  • ์ƒˆ๋กœ์šด ์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

    git remote add <์›๊ฒฉ ์ €์žฅ์†Œ> <์ €์žฅ์†Œ url>

๊ธฐ๋ณธ ๋ช…๋ น์–ด

  • ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์กด์žฌํ•˜๋Š” ํŒŒ์ผ ์Šคํ…Œ์ด์ง•ํ•˜๊ณ  ์ปค๋ฐ‹ํ•˜๊ธฐ

    git add <ํŒŒ์ผ>
    git commit -m โ€œ<๋ฉ”์‹œ์ง€>โ€
  • ํŒŒ์ผ์˜ ์ผ๋ถ€๋ฅผ ์Šคํ…Œ์ด์ง•ํ•˜๊ธฐ

    git add -p [<ํŒŒ์ผ> [<ํŒŒ์ผ> [๊ธฐํƒ€ ํŒŒ์ผ๋“คโ€ฆ]]]
    add ๋ช…๋ น์—์„œ Git ๋Œ€ํ™” ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ
    git add -i
  • ์ˆ˜์ •๋˜๊ณ  ์ถ”์ ๋˜๋Š” ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์Šคํ…Œ์ด์ง•ํ•˜๊ธฐ

    git add -u [<๊ฒฝ๋กœ> [<๊ฒฝ๋กœ>]]
  • ์ˆ˜์ •๋˜๊ณ  ์ถ”์ ๋˜๋Š” ๋ชจ๋“  ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ปค๋ฐ‹ํ•˜๊ธฐ

    git commit -m โ€œ<๋ฉ”์‹œ์ง€>โ€ -a
  • ์ž‘์—… ํŠธ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋Œ๋ ค๋†“๊ธฐ

    git checkout HEAD <ํŒŒ์ผ> [<ํŒŒ์ผ>]
  • ์ปค๋ฐ‹๋˜์ง€ ์•Š๊ณ  ์Šคํ…Œ์ด์ง•๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์žฌ์„ค์ •ํ•˜๊ธฐ

    git reset HEAD <ํŒŒ์ผ> [<ํŒŒ์ผ>]
  • ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ ๊ณ ์น˜๊ธฐ

    git commit -m โ€œ<๋ฉ”์‹œ์ง€>โ€ - -amend
  • ์ด์ „ ์ปค๋ฐ‹์„ ์ˆ˜์ •ํ•˜๊ณ  ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ

    git commit -C HEAD - -amend

๊ฐ€์ง€(branch)

  • ์ง€์—ญ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ๋ณด๊ธฐ

    git branch
  • ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ๋ณด๊ธฐ

    git branch -r
  • ์ง€์—ญ๊ณผ ์›๊ฒฉ์„ ํฌํ•จํ•œ ๋ชจ๋“  ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ๋ณด๊ธฐ

    git branch -a
  • ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑํ•˜๊ธฐ

    git branch <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜>
  • ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜ ์ฒดํฌ์•„์›ƒํ•˜๊ธฐ

    git checkout <๋ธŒ๋žœ์น˜>
  • ํ˜„์žฌ ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ์ƒ์„ฑํ•˜๊ณ  ์ฒดํฌ์•„์›ƒํ•˜๊ธฐ

    git checkout -b <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜>
  • ๋‹ค๋ฅธ ์‹œ์ž‘ ์ง€์ ์—์„œ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑํ•˜๊ธฐ

    git branch <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜> <๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์œ„์น˜>
  • ๊ธฐ์กด์˜ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜๋กœ ๋ฎ์–ด์“ฐ๊ธฐ

    git branch -f <๊ธฐ์กด ๋ธŒ๋žœ์น˜> [<๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•  ์œ„์น˜>]
  • ๋ธŒ๋žœ์น˜๋ฅผ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ๋ธŒ๋žœ์น˜๋ช… ๋ณ€๊ฒฝํ•˜๊ธฐ

    # <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜>๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
    git checkout -m <๊ธฐ์กด ๋ธŒ๋žœ์น˜> <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜>
    # ๋ฌด์กฐ๊ฑด ๋ฎ์–ด์“ฐ๊ธฐ
    git checkout -M <๊ธฐ์กด ๋ธŒ๋žœ์น˜> <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜>
  • ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜๋ฅผ ํ˜„์žฌ ๋ธŒ๋žœ์น˜๋กœ ํ•ฉ์น˜๊ธฐ

    git merge <๋ธŒ๋žœ์น˜>
  • ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ  ํ•ฉ์น˜๊ธฐ

    git merge - -no-commit <๋ธŒ๋žœ์น˜>
  • ์„ ํƒํ•˜์—ฌ ํ•ฉ์น˜๊ธฐ

    git cherry-pick <์ปค๋ฐ‹๋ช…>
  • ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ณ  ์„ ํƒํ•˜์—ฌ ํ•ฉ์น˜๊ธฐ

    git cherry-pick -n <์ปค๋ฐ‹๋ช…>
  • ๋ธŒ๋žœ์น˜์˜ ์ด๋ ฅ์„ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๊ธฐ

    git merge - -squash <๋ธŒ๋žœ์น˜>
  • ๋ธŒ๋žœ์น˜ ์‚ญ์ œํ•˜๊ธฐ

    # ์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜๊ฐ€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ํ•ฉ์ณ์กŒ์„ ๊ฒฝ์šฐ์—๋งŒ
    git branch -d <์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜>
    # ์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜๊ฐ€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ํ•ฉ์ณ์ง€์ง€ ์•Š์•˜์–ด๋„
    git branch -D <์‚ญ์ œํ•  ๋ธŒ๋žœ์น˜>

Git ์ด๋ ฅ

  • ๋ชจ๋“  ์ด๋ ฅ ๋ณด๊ธฐ

    git log
  • ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณด์—ฌ์ฃผ๋Š” ํŒจ์น˜์™€ ํ•จ๊ป˜ ๋กœ๊ทธ ํ‘œ์‹œํ•˜๊ธฐ

    git log -p
  • 1๊ฐœ์˜ ํ•ญ๋ชฉ๋งŒ ๋ณด์ด๋„๋ก ๋กœ๊ทธ ๊ฐœ์ˆ˜ ์ œํ•œํ•˜๊ธฐ

    git log -1
  • 20๊ฐœ์˜ ํ•ญ๋ชฉ๊ณผ ํŒจ์น˜๋งŒ ๋ณด์ด๋„๋ก ๋กœ๊ทธ ์ œํ•œํ•˜๊ธฐ

    git log -20 -p
  • 6๊ฐœ์›” ๋™์•ˆ์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ ๋ณด๊ธฐ

    git log - -since=โ€6 hoursโ€
  • ์ดํ‹€ ์ „๊นŒ์ง€์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ ๋ณด๊ธฐ

    git log - -before=โ€2 daysโ€
  • HEAD๋ณด๋‹ค ์„ธ ๊ฐœ ์ด์ „์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ ๋ณด๊ธฐ

    git log -1 HEAD-3
    git log -1 HEAD^^^
    git log -1 HEAD~1^^
  • ๋‘ ์ง€์  ์‚ฌ์ด์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ ๋ณด๊ธฐ

    git log <์‹œ์ž‘ ์ง€์ >โ€ฆ<๋ ์ง€์ >
    # ์‹œ์ž‘ ์ง€์ ์ด๋‚˜ ๋ ์ง€์ ์€ ์ปค๋ฐ‹๋ช…, ๋ธŒ๋žœ์น˜๋ช…, ํ˜น์€ ํƒœ๊ทธ๋ช…์ด ๋  ์ˆ˜ ์žˆ๊ณ  ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๊ฐ ํ•ญ๋ชฉ์˜ ๋กœ๊ทธ ์ด๋ ฅ ํ•œ ์ค„์”ฉ ๋ณด๊ธฐ

    git log - -pretty=oneline
  • ๊ฐ ํ•ญ๋ชฉ๋งˆ๋‹ค ์˜ํ–ฅ ๋ฐ›์€ ์ค„์˜ ํ†ต๊ณ„ ๋ณด๊ธฐ

    git log - -stat
  • ์ปค๋ฐ‹ํ•  ์‹œ์ ์˜ ํŒŒ์ผ ์ƒํƒœ ๋ณด๊ธฐ

    git log - -name-status
  • ํ˜„์žฌ ์ž‘์—… ํŠธ๋ฆฌ์™€ ์ธ๋ฑ์Šค์˜ ์ฐจ์ด์  ๋ณด๊ธฐ

    git diff
  • ์ธ๋ฑ์Šค์™€ ์ €์žฅ์†Œ์˜ ์ฐจ์ด์  ๋ณด๊ธฐ

    git diff - -cached
  • ์ž‘์—… ํŠธ๋ฆฌ์™€ ์ €์žฅ์†Œ์˜ ์ฐจ์ด์  ๋ณด๊ธฐ

    git diff HEAD
  • ์ž‘์—… ํŠธ๋ฆฌ์™€ ํŠน์ • ์œ„์น˜ ๊ฐ„์˜ ์ฐจ์ด์  ๋ณด๊ธฐ

    git diff <์‹œ์ž‘ ์ง€์ >
    # ์‹œ์ž‘ ์ง€์ ์€ ์ปค๋ฐ‹๋ช… or ๋ธŒ๋žœ์น˜๋ช… or ํƒœ๊ทธ๋ช…
  • ์ €์žฅ์†Œ์˜ ๋‘ ์ง€์  ์‚ฌ์ด์˜ ์ฐจ์ด์  ๋ณด๊ธฐ

    git diff <์‹œ์ž‘ ์ง€์ > <๋ ์ง€์ >
  • ์ฐจ์ด์ ์˜ ํ†ต๊ณ„ ๋ณด๊ธฐ

    git diff - -stat <์‹œ์ž‘ ์ง€์ > [<๋ ์ง€์ >]
  • ํŒŒ์ผ์˜ ์ปค๋ฐ‹ ์ •๋ณด ์ค„ ๋‹จ์œ„๋กœ ๋ณด๊ธฐ

    git blame <ํŒŒ์ผ>
  • ํŒŒ์ผ์˜ ์ค„ ๋‹จ์œ„์˜ ๋ณต์‚ฌ, ๋ถ™์—ฌ ๋„ฃ๊ธฐ, ์ด๋™ ์ •๋ณด ๋ณด๊ธฐ

    git blame -M <ํŒŒ์ผ>
  • ํŒŒ์ผ์˜ ์ค„ ๋‹จ์œ„์˜ ์ด๋™๊ณผ ์›๋ณธ ํŒŒ์ผ ์ •๋ณด ๋ณด๊ธฐ

    git blame -C -C <ํŒŒ์ผ>
  • ๋กœ๊ทธ์—์„œ ๋ณต์‚ฌ์™€ ๋ถ™์—ฌ ๋„ฃ์€ ์ •๋ณด ๋ณด๊ธฐ

    git log -C -C -p -1 <ํŠน์ • ์ง€์ >

์›๊ฒฉ ์ €์žฅ์†Œ

  • ์ €์žฅ์†Œ ๋ณต์ œํ•˜๊ธฐ

    git clone <์ €์žฅ์†Œ>
  • ๋งˆ์ง€๋ง‰ 200๊ฐœ์˜ ์ปค๋ฐ‹๋งŒ ํฌํ•จํ•˜์—ฌ ์ €์žฅ์†Œ ๋ณต์ œํ•˜๊ธฐ

    git clone - -depth 200 <์ €์žฅ์†Œ>
  • ์ƒˆ๋กœ์šด ์›๊ฒฉ ์ €์žฅ์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

    git remote add <์›๊ฒฉ ์ €์žฅ์†Œ> <์ €์žฅ์†Œ url>
  • ๋ชจ๋“  ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ๋ชฉ๋ก ๋ณด๊ธฐ

    git branch -r
  • ์›๊ฒฉ ๋ธŒ๋žœ์น˜์—์„œ ์ง€์—ญ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑํ•˜๊ธฐ

    git branch <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜> <์›๊ฒฉ ๋ธŒ๋žœ์น˜>
  • ์›๊ฒฉ ํƒœ๊ทธ์—์„œ ์ง€์—ญ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑํ•˜๊ธฐ

    git branch <์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜> <์›๊ฒฉ ํƒœ๊ทธ>
  • origin ์ €์žฅ์†Œ์—์„œ ํ•ฉ์น˜์ง€ ์•Š๊ณ  ์ง€์—ญ ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ

    git fetch
  • ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ํ•ฉ์น˜์ง€ ์•Š๊ณ  ์ง€์—ญ ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ

    git fetch <์›๊ฒฉ ์ €์žฅ์†Œ>
  • ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๊ธฐ

    git pull <์›๊ฒฉ ์ €์žฅ์†Œ>
  • origin ์ €์žฅ์†Œ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ ธ์™€ ํ˜„์žฌ ๋ธŒ๋žœ์น˜์— ํ•ฉ์น˜๊ธฐ

    git pull
  • ์ง€์—ญ ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹ฑํ•˜๊ธฐ

    git push <์›๊ฒฉ ์ €์žฅ์†Œ> <์ง€์—ญ ๋ธŒ๋žœ์น˜>:<์›๊ฒฉ ๋ธŒ๋žœ์น˜>
  • ์ง€์—ญ ๋ธŒ๋žœ์น˜๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์›๊ฒฉ ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹ฑํ•˜๊ธฐ

    git push <์›๊ฒฉ ์ €์žฅ์†Œ> <์ง€์—ญ ๋ธŒ๋žœ์น˜>
  • ์ƒˆ๋กœ์šด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋ฅผ ์›๊ฒฉ ์ €์žฅ์†Œ์— ํ‘ธ์‹ฑํ•˜๊ธฐ

    git push <์›๊ฒฉ ์ €์žฅ์†Œ> <์ง€์—ญ ๋ธŒ๋žœ์น˜>
  • ์›๊ฒฉ ์ €์žฅ์†Œ์—์„œ ์“ธ๋ชจ๊ฐ€ ์—†์–ด์ง„ ์›๊ฒฉ ๋ธŒ๋žœ์น˜ ์ œ๊ฑฐํ•˜๊ธฐ

    git remote prune <์›๊ฒฉ ์ €์žฅ์†Œ>
  • ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ด€๋ จ๋œ ๋ธŒ๋žœ์น˜๋„ ์ œ๊ฑฐํ•˜๊ธฐ

    git remote rm <์›๊ฒฉ ์ €์žฅ์†Œ>

Git ๊ณผ Github

  • Git์€ Coffee, Github์€ CoffeeShop์ด๋‹ค.

Github๊ณผ ๋น„์Šทํ•œ ์‚ฌ์ดํŠธ


๋ณ‘ํ•ฉ์ •๋ ฌ์˜ ๊ตฌํ˜„(์ถ”๊ฐ€)

  • java
    public class MergeSort1 {
    
        public static void main(String[] args) {
            int[] test = {59, 2, 41, 9, 10, 1, 8, 3};
            List<Integer> test2 = new ArrayList<Integer>();
            for (Integer i : test) {
                test2.add(i);
            }
    
            System.out.println(Arrays.toString(mergeSort(test)));
            // System.out.println(mergeSort(test2).toString());
        }
    
        // ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋ฐฐ์—ด
        public static int[] mergeSort(int[] numbers) {
            // ์ •๋ ฌํ•˜๋ ค๋Š” ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ ๋ฆฌํ„ด : ์žฌ๊ท€ํ˜ธ์ถœ์˜ ์ข…๋ฃŒ ์กฐ๊ฑด
            if (numbers.length < 2) {
                return numbers;
            }
    
            // ๋ถ„ํ• ํ•œ ์›์†Œ๋“ค์„ ๋‹ด์„ ๋ฐฐ์—ด, 0๋ถ€ํ„ฐ ์ ˆ๋ฐ˜๊นŒ์ง€(์›์†Œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ํ™€์ˆ˜์˜ ๊ฒฝ์šฐ ์†Œ์ˆ˜์  ์ ˆ์‚ญ)
            int[] leftArray = Arrays.copyOfRange(numbers, 0, numbers.length / 2);
            /* ํ™•์ธ์šฉ
            */
            System.out.println(Arrays.toString(leftArray));
    
            // ๋ถ„ํ• ํ•œ ์›์†Œ๋“ค์„ ๋‹ด์„ ๋ฐฐ์—ด, ์ ˆ๋ฐ˜๋ถ€ํ„ฐ ๋๊นŒ์ง€
            int[] rightArray = Arrays.copyOfRange(numbers, numbers.length / 2, numbers.length);
            /* ํ™•์ธ์šฉ
            */
            System.out.println(Arrays.toString(rightArray));
            // ๋ถ„ํ• ํ•œ ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ์ •๋ ฌํ•˜์—ฌ ๋ณ‘ํ•ฉํ•˜๊ธฐ
            return merge(mergeSort(leftArray), mergeSort(rightArray));
        }
    
        // ๋ณ‘ํ•ฉ
        private static int[] merge(int[] left, int[] right) {
            // ์™ผ์ชฝ ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•˜๋Š” ํฌ์ธํ„ฐ
            int leftPtr = 0;
            // ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์˜ ์ˆœ์„œ๋ฅผ ์ €์žฅํ•˜๋Š” ํฌ์ธํ„ฐ
            int rightPtr = 0;
            // ๋ณ‘ํ•ฉํ•  ๋ฐฐ์—ด์— ๊ฐ’์„ ์ €์žฅํ•  ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜
            int index = 0;
    
            // ์™ผ์ชฝ ๋ฐฐ์—ด๊ณผ ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉํ•  ๋ฐฐ์—ด ์ƒ์„ฑ
            int[] merged = new int[left.length + right.length];
    
            // ์™ผ์ชฝ ๋ฐฐ์—ด์˜ ํฌ์ธํ„ฐ๊ฐ€ ์™ผ์ชฝ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง€๊ฑฐ๋‚˜
            // ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์˜ ํฌ์ธํ„ฐ๊ฐ€ ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ปค์ง€๋ฉด ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
            while (leftPtr < left.length && rightPtr < right.length) {
                // System.out.println("1๋ฒˆ์งธ while๋ฌธ์˜ leftPtr : " + leftPtr);
                // System.out.println("1๋ฒˆ์งธ while๋ฌธ์˜ rightPtr : " + rightPtr);
                // ์™ผ์ชฝ ๋ฐฐ์—ด์˜ leftPtr๋ฒˆ์งธ ์›์†Œ ๊ฐ’์ด ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์˜ rightPtr ์›์†Œ ๊ฐ’๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
                if (left[leftPtr] < right[rightPtr]) {
                    // ์ƒˆ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์˜ index๋ฒˆ์งธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ 
                    merged[index] = left[leftPtr];
                    // leftPtr ์ฆ๊ฐ€
                    leftPtr++;
                    // index ์ฆ๊ฐ€
                    index++;
    
                // ์™ผ์ชฝ ๋ฐฐ์—ด์˜ leftPtr๋ฒˆ์งธ ์›์†Œ ๊ฐ’์ด ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์˜ rightPtr ์›์†Œ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด
                } else {
                    // ์ƒˆ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์˜ index๋ฒˆ์งธ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ 
                    merged[index] = right[rightPtr];
                    // rightPtr ์ฆ๊ฐ€
                    rightPtr++;
                    // index ์ฆ๊ฐ€
                    index++;
                }
            }
    
            // System.out.println(left.length);
            // System.out.println(right.length);
            // System.out.println(leftPtr);
            // System.out.println(rightPtr);
    
            // ์œ„ ์กฐ๊ฑด์—์„œ ๊ฒ€์‚ฌํ•˜์ง€ ๋ชปํ•œ ์š”์†Œ๋ฅผ ์žฌ์ฐจ ๊ฒ€์‚ฌ(์™ผ์ชฝ)
            // ์™ผ์ชฝ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๋Š” ๊ฒƒ
            // ๊ฐ’์ด true ๋ผ๋ฉด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์‚ฝ์ž…ํ•จ
            while (leftPtr < left.length) {
                merged[index] = left[leftPtr];
                leftPtr++;
                index++;
            }
    
            // ์œ„ ์กฐ๊ฑด์—์„œ ๊ฒ€์‚ฌํ•˜์ง€ ๋ชปํ•œ ์š”์†Œ๋ฅผ ์žฌ์ฐจ ๊ฒ€์‚ฌ(์˜ค๋ฅธ์ชฝ)
            // ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๋Š” ๊ฒƒ
            // ๊ฐ’์ด true ๋ผ๋ฉด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๊ฐ’์„ ์‚ฝ์ž…ํ•จ
            while (rightPtr < right.length) {
                merged[index] = right[rightPtr];
                rightPtr++;
                index++;
            }
    
            return merged;
        }
    
        /***************************************************************************/
    
        // ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—ด - ๋ฆฌ์ŠคํŠธ
        public static List<Integer> mergeSort(List<Integer> values) {
            if (values.size() < 2) {
                return values;
            }
    
            List<Integer> leftHalf = values.subList(0, values.size() / 2);
            List<Integer> rightHalf = values.subList(values.size() / 2, values.size());
            return merge(mergeSort(leftHalf), mergeSort(rightHalf));
        }
    
        // ๋ณ‘ํ•ฉ
        private static List<Integer> merge(List<Integer> left, List<Integer> right) {
            int leftPtr = 0;
            int rightPtr = 0;
    
            List<Integer> merged = new ArrayList<>(left.size() + right.size());
    
            while (leftPtr < left.size() && rightPtr < right.size()) {
                if (left.get(leftPtr) < right.get(rightPtr)) {
                    merged.add(left.get(leftPtr));
                    leftPtr++;
                } else {
                    merged.add(right.get(rightPtr));
                    rightPtr++;
                }
            }
    
            while (leftPtr < left.size()) {
                merged.add(left.get(leftPtr));
                leftPtr++;
            }
    
            while (rightPtr < right.size()) {
                merged.add(right.get(rightPtr));
                rightPtr++;
            }
    
            return merged;
        }
    
    }

๋ฌธ์ œ

  • ๋ฌธ์ œ ์„ค๋ช…

    • 0 ๋˜๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ •์ˆ˜๋ฅผ ์ด์–ด ๋ถ™์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์•Œ์•„๋‚ด ์ฃผ์„ธ์š”.
      ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์–ด์ง„ ์ •์ˆ˜๊ฐ€ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” 6210์ž…๋‹ˆ๋‹ค.
      
    • 0 ๋˜๋Š” ์–‘์˜ ์ •์ˆ˜๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ˆœ์„œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์–ด return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  • ์ œํ•œ ์‚ฌํ•ญ

    • numbers์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 100,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • numbers์˜ ์›์†Œ๋Š” 0 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
    • ์ •๋‹ต์ด ๋„ˆ๋ฌด ํด ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ์–ด return ํ•ฉ๋‹ˆ๋‹ค.
  • ํ’€์ด

    // ์ฃผ์–ด์ง€๋Š” ๊ฐ’
    int[] n = {3, 30, 34, 5, 9};
    
    String solution7(int[] n){
        String answer = "";
    
        // ์ฝ”๋“œ ์ž‘์„ฑ
    
        return answer;
    }
    // ์ฃผ์–ด์ง€๋Š” ๊ฐ’
    int[] n = {3, 30, 34, 5, 9};
    
    String solution7(int[] n){
        String answer = "";
    
        // ์ฝ”๋“œ ์ž‘์„ฑ
    
        return answer;
    }

  • ๋ฌธ์ œ

    • ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ N๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
      • ๊ธธ์ด๊ฐ€ ์งง์€ ๊ฒƒ๋ถ€ํ„ฐ
      • ๊ธธ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ์‚ฌ์ „ ์ˆœ์œผ๋กœ
  • ์ž…๋ ฅ

    • ์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1โ‰คNโ‰ค20,000) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด๊ฐ€ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 50์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ถœ๋ ฅ

    • ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜์—ฌ ๋‹จ์–ด๋“ค์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹จ, ๊ฐ™์€ ๋‹จ์–ด๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž…๋ ฅ๋œ ๊ฒฝ์šฐ์—๋Š” ํ•œ ๋ฒˆ์”ฉ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.
  • ํ’€์ด

    void solution5(){
        Scanner sc = new Scanner(System.in);
        int count = Integer.parseInt(sc.nextLine().trim());
    
    }
    void solution5(){
    
    }

  • ๋ฌธ์ œ

    • ์ƒ๊ทผ์ด๋Š” ๋‚˜๋ฌด M๋ฏธํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ทผ์ฒ˜์— ๋‚˜๋ฌด๋ฅผ ๊ตฌ์ž…ํ•  ๊ณณ์ด ๋ชจ๋‘ ๋งํ•ด๋ฒ„๋ ธ๊ธฐ ๋•Œ๋ฌธ์—, ์ •๋ถ€์— ๋ฒŒ๋ชฉ ํ—ˆ๊ฐ€๋ฅผ ์š”์ฒญํ–ˆ๋‹ค. ์ •๋ถ€๋Š” ์ƒ๊ทผ์ด๋„ค ์ง‘ ๊ทผ์ฒ˜์˜ ๋‚˜๋ฌด ํ•œ ์ค„์— ๋Œ€ํ•œ ๋ฒŒ๋ชฉ ํ—ˆ๊ฐ€๋ฅผ ๋‚ด์ฃผ์—ˆ๊ณ , ์ƒ๊ทผ์ด๋Š” ์ƒˆ๋กœ ๊ตฌ์ž…ํ•œ ๋ชฉ์žฌ์ ˆ๋‹จ๊ธฐ์„ ์ด์šฉํ•ด์„œ ๋‚˜๋ฌด๋ฅผ ๊ตฌํ• ๊ฒƒ์ด๋‹ค.

    • ๋ชฉ์žฌ์ ˆ๋‹จ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค. ๋จผ์ €, ์ƒ๊ทผ์ด๋Š” ์ ˆ๋‹จ๊ธฐ์— ๋†’์ด H๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋†’์ด๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ†ฑ๋‚ ์ด ๋•…์œผ๋กœ๋ถ€ํ„ฐ H๋ฏธํ„ฐ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค. ๊ทธ ๋‹ค์Œ, ํ•œ ์ค„์— ์—ฐ์†ํ•ด์žˆ๋Š” ๋‚˜๋ฌด๋ฅผ ๋ชจ๋‘ ์ ˆ๋‹จํ•ด๋ฒ„๋ฆฐ๋‹ค. ๋”ฐ๋ผ์„œ, ๋†’์ด๊ฐ€ H๋ณด๋‹ค ํฐ ๋‚˜๋ฌด๋Š” H ์œ„์˜ ๋ถ€๋ถ„์ด ์ž˜๋ฆด ๊ฒƒ์ด๊ณ , ๋‚ฎ์€ ๋‚˜๋ฌด๋Š” ์ž˜๋ฆฌ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ์ค„์— ์—ฐ์†ํ•ด์žˆ๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ 20, 15, 10, 17์ด๋ผ๊ณ  ํ•˜์ž. ์ƒ๊ทผ์ด๊ฐ€ ๋†’์ด๋ฅผ 15๋กœ ์ง€์ •ํ–ˆ๋‹ค๋ฉด, ๋‚˜๋ฌด๋ฅผ ์ž๋ฅธ ๋’ค์˜ ๋†’์ด๋Š” 15, 15, 10, 15๊ฐ€ ๋  ๊ฒƒ์ด๊ณ , ์ƒ๊ทผ์ด๋Š” ๊ธธ์ด๊ฐ€ 5์ธ ๋‚˜๋ฌด์™€ 2์ธ ๋‚˜๋ฌด๋ฅผ ๋“ค๊ณ  ์ง‘์— ๊ฐˆ ๊ฒƒ์ด๋‹ค. (์ด 7๋ฏธํ„ฐ๋ฅผ ์ง‘์— ๋“ค๊ณ  ๊ฐ„๋‹ค)

    • ์ƒ๊ทผ์ด๋Š” ํ™˜๊ฒฝ์— ๋งค์šฐ ๊ด€์‹ฌ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋ฌด๋ฅผ ํ•„์š”ํ•œ ๋งŒํผ๋งŒ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ, ์ ์–ด๋„ M๋ฏธํ„ฐ์˜ ๋‚˜๋ฌด๋ฅผ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

  • ์ž…๋ ฅ

    • ์ฒซ์งธ ์ค„์— ๋‚˜๋ฌด์˜ ์ˆ˜ N๊ณผ ์ƒ๊ทผ์ด๊ฐ€ ์ง‘์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ํ•˜๋Š” ๋‚˜๋ฌด์˜ ๊ธธ์ด M์ด ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค N โ‰ค 1,000,000, 1 โ‰ค M โ‰ค 2,000,000,000)

    • ๋‘˜์งธ ์ค„์—๋Š” ๋‚˜๋ฌด์˜ ๋†’์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‚˜๋ฌด์˜ ๋†’์ด์˜ ํ•ฉ์€ ํ•ญ์ƒ M์„ ๋„˜๊ธฐ ๋•Œ๋ฌธ์—, ์ƒ๊ทผ์ด๋Š” ์ง‘์— ํ•„์š”ํ•œ ๋‚˜๋ฌด๋ฅผ ํ•ญ์ƒ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋†’์ด๋Š” 1,000,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

  • ์ถœ๋ ฅ

    • ์ ์–ด๋„ M๋ฏธํ„ฐ์˜ ๋‚˜๋ฌด๋ฅผ ์ง‘์— ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ ˆ๋‹จ๊ธฐ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋†’์ด์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ํ’€์ด

    void solution5(){
        Scanner sc = new Scanner(System.in);
        int count = Integer.parseInt(sc.nextLine().trim());
    
    }
    void solution5(){
    
    }


๋’ค๋กœ๊ฐ€๊ธฐ