๊ด€๋ฆฌ ๋ฉ”๋‰ด

Binary Journey

[ํ…Œ์ฝ”ํ…Œ์ฝ”1.5 1-10] ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›์€ ์„ ๋ฌผ ๋ณธ๋ฌธ

Algorithm/ํ…Œ์ฝ”ํ…Œ์ฝ”1.5(2025.01)

[ํ…Œ์ฝ”ํ…Œ์ฝ”1.5 1-10] ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›์€ ์„ ๋ฌผ

binaryJournalist 2025. 1. 14. 15:41
๋ฐ˜์‘ํ˜•
๐Ÿ’กํ…Œ์ฝ”ํ…Œ์ฝ” ์‹œ์ฆŒ 1.5 1ํšŒ ๋ชจ์ž„ off-site ๋ฌธ์ œ ํ’€์ด์ž…๋‹ˆ๋‹ค. (2025.01.12)

 

๋ฌธ์ œ

 

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›์€ ์„ ๋ฌผ

 

๋‚ด์šฉ

 

์„ ๋ฌผ์„ ์ง์ ‘ ์ „ํ•˜๊ธฐ ํž˜๋“ค ๋•Œ ์นด์นด์˜คํ†ก ์„ ๋ฌผํ•˜๊ธฐ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ์ถ•ํ•˜ ์„ ๋ฌผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ์นœ๊ตฌ๋“ค์ด ์ด๋ฒˆ ๋‹ฌ๊นŒ์ง€ ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์€ ๊ธฐ๋ก์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์Œ ๋‹ฌ์— ๋ˆ„๊ฐ€ ์„ ๋ฌผ์„ ๋งŽ์ด ๋ฐ›์„์ง€ ์˜ˆ์ธกํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‘ ์‚ฌ๋žŒ์ด ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์€ ๊ธฐ๋ก์ด ์žˆ๋‹ค๋ฉด, ์ด๋ฒˆ ๋‹ฌ๊นŒ์ง€ ๋‘ ์‚ฌ๋žŒ ์‚ฌ์ด์— ๋” ๋งŽ์€ ์„ ๋ฌผ์„ ์ค€ ์‚ฌ๋žŒ์ด ๋‹ค์Œ ๋‹ฌ์— ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด A๊ฐ€ B์—๊ฒŒ ์„ ๋ฌผ์„ 5๋ฒˆ ์คฌ๊ณ , B๊ฐ€ A์—๊ฒŒ ์„ ๋ฌผ์„ 3๋ฒˆ ์คฌ๋‹ค๋ฉด ๋‹ค์Œ ๋‹ฌ์—” A๊ฐ€ B์—๊ฒŒ ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋‘ ์‚ฌ๋žŒ์ด ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์€ ๊ธฐ๋ก์ด ํ•˜๋‚˜๋„ ์—†๊ฑฐ๋‚˜ ์ฃผ๊ณ ๋ฐ›์€ ์ˆ˜๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ์„ ๋ฌผ ์ง€์ˆ˜๊ฐ€ ๋” ํฐ ์‚ฌ๋žŒ์ด ์„ ๋ฌผ ์ง€์ˆ˜๊ฐ€ ๋” ์ž‘์€ ์‚ฌ๋žŒ์—๊ฒŒ ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ์„ ๋ฌผ ์ง€์ˆ˜๋Š” ์ด๋ฒˆ ๋‹ฌ๊นŒ์ง€ ์ž์‹ ์ด ์นœ๊ตฌ๋“ค์—๊ฒŒ ์ค€ ์„ ๋ฌผ์˜ ์ˆ˜์—์„œ ๋ฐ›์€ ์„ ๋ฌผ์˜ ์ˆ˜๋ฅผ ๋บ€ ๊ฐ’์ž…๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด A๊ฐ€ ์นœ๊ตฌ๋“ค์—๊ฒŒ ์ค€ ์„ ๋ฌผ์ด 3๊ฐœ๊ณ  ๋ฐ›์€ ์„ ๋ฌผ์ด 10๊ฐœ๋ผ๋ฉด A์˜ ์„ ๋ฌผ ์ง€์ˆ˜๋Š” -7์ž…๋‹ˆ๋‹ค. B๊ฐ€ ์นœ๊ตฌ๋“ค์—๊ฒŒ ์ค€ ์„ ๋ฌผ์ด 3๊ฐœ๊ณ  ๋ฐ›์€ ์„ ๋ฌผ์ด 2๊ฐœ๋ผ๋ฉด B์˜ ์„ ๋ฌผ ์ง€์ˆ˜๋Š” 1์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ A์™€ B๊ฐ€ ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์€ ์ ์ด ์—†๊ฑฐ๋‚˜ ์ •ํ™•ํžˆ ๊ฐ™์€ ์ˆ˜๋กœ ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์•˜๋‹ค๋ฉด, ๋‹ค์Œ ๋‹ฌ์—” B๊ฐ€ A์—๊ฒŒ ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ๋งŒ์•ฝ ๋‘ ์‚ฌ๋žŒ์˜ ์„ ๋ฌผ ์ง€์ˆ˜๋„ ๊ฐ™๋‹ค๋ฉด ๋‹ค์Œ ๋‹ฌ์— ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ทœ์น™๋Œ€๋กœ ๋‹ค์Œ ๋‹ฌ์— ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ๋‹น์‹ ์€ ์„ ๋ฌผ์„ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›์„ ์นœ๊ตฌ๊ฐ€ ๋ฐ›์„ ์„ ๋ฌผ์˜ ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์นœ๊ตฌ๋“ค์˜ ์ด๋ฆ„์„ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด friends ์ด๋ฒˆ ๋‹ฌ๊นŒ์ง€ ์นœ๊ตฌ๋“ค์ด ์ฃผ๊ณ ๋ฐ›์€ ์„ ๋ฌผ ๊ธฐ๋ก์„ ๋‹ด์€ 1์ฐจ์› ๋ฌธ์ž์—ด ๋ฐฐ์—ด gifts๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋•Œ, ๋‹ค์Œ๋‹ฌ์— ๊ฐ€์žฅ ๋งŽ์€ ์„ ๋ฌผ์„ ๋ฐ›๋Š” ์นœ๊ตฌ๊ฐ€ ๋ฐ›์„ ์„ ๋ฌผ์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

 

๊ธฐ๋กํ•˜๊ธฐ

๐Ÿ’ก ์–ด๋””๊นŒ์ง€ ์ƒ๊ฐํ•ด๋ดค๋Š”์ง€ ๋‹จ๊ณ„์ ์œผ๋กœ ๊ธฐ๋กํ•ด๋ด…๋‹ˆ๋‹ค.

 

์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋ ค ํ–ˆ๋‚˜์š”?

 

2์ฐจ์› ๋ฐฐ์—ด์„ ์“ด๋‹ค.

 

์ ์šฉ ๊ทผ๊ฑฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ ์„ค๋ช… ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ์ œ์ผ ๋‚ซ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

 

ํ’€์ด

ํ’€์ด ์‹œ๊ฐ„

์‹œ์ž‘ ์‹œ๊ฐ ์ข…๋ฃŒ ์‹œ๊ฐ ์ด ์†Œ์š” ์‹œ๊ฐ„
22:50 23:33 43๋ถ„

 

๋ฌธ์ œ ๋ถ„์„

 

์ œ์•ฝ ์‚ฌํ•ญ ํŒŒ์•… & ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

 

  • 2 ≤ friends์˜ ๊ธธ์ด = ์นœ๊ตฌ๋“ค์˜ ์ˆ˜ ≤ 50
    • friends์˜ ์›์†Œ๋Š” ์นœ๊ตฌ์˜ ์ด๋ฆ„์„ ์˜๋ฏธํ•˜๋Š” ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๊ธธ์ด๊ฐ€ 10 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • ์ด๋ฆ„์ด ๊ฐ™์€ ์นœ๊ตฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • 1 ≤ gifts์˜ ๊ธธ์ด ≤ 10,000
    • gifts์˜ ์›์†Œ๋Š” "A B"ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. A๋Š” ์„ ๋ฌผ์„ ์ค€ ์นœ๊ตฌ์˜ ์ด๋ฆ„์„ B๋Š” ์„ ๋ฌผ์„ ๋ฐ›์€ ์นœ๊ตฌ์˜ ์ด๋ฆ„์„ ์˜๋ฏธํ•˜๋ฉฐ ๊ณต๋ฐฑ ํ•˜๋‚˜๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
    • A์™€ B๋Š” friends์˜ ์›์†Œ์ด๋ฉฐ A์™€ B๊ฐ€ ๊ฐ™์€ ์ด๋ฆ„์ธ ๊ฒฝ์šฐ๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ž…๋ ฅ๊ฐ’ ๋ถ„์„

๐Ÿ’ก ์ž…๋ ฅ๊ฐ’์„ ๋ถ„์„ํ•˜๋ฉด ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ
friends gifts result
["muzi", "ryan", "frodo", "neo"] ["muzi frodo", "muzi frodo", "ryan muzi", "ryan muzi", "ryan muzi", "frodo muzi", "frodo ryan", "neo muzi"] 2
["joy", "brad", "alessandro", "conan", "david"] ["alessandro brad", "alessandro joy", "alessandro conan", "david alessandro", "alessandro david"] 4
["a", "b", "c"] ["a b", "b a", "c a", "a c", "a c", "c a"] 0
 
์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

 

์ž…์ถœ๋ ฅ ์˜ˆ #1

์ฃผ๊ณ ๋ฐ›์€ ์„ ๋ฌผ๊ณผ ์„ ๋ฌผ ์ง€์ˆ˜๋ฅผ ํ‘œ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

↓์ค€ ์‚ฌ๋žŒ \ ๋ฐ›์€ ์‚ฌ๋žŒ→ muzi ryan frodo neo
muzi - 0 2 0
ryan 3 - 0 0
frodo 1 1 - 0
neo 1 0 0 -

 

์ด๋ฆ„ ์ค€ ์„ ๋ฌผ ๋ฐ›์€ ์„ ๋ฌผ ์„ ๋ฌผ ์ง€์ˆ˜
muzi 2 5 -3
ryan 3 1 2
frodo 2 2 0
neo 1 0 1

 

muzi๋Š” ์„ ๋ฌผ์„ ๋” ๋งŽ์ด ์คฌ๋˜ frodo์—๊ฒŒ์„œ ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.
ryan์€ ์„ ๋ฌผ์„ ๋” ๋งŽ์ด ์คฌ๋˜ muzi์—๊ฒŒ์„œ ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›๊ณ , ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์ง€ ์•Š์•˜๋˜ neo๋ณด๋‹ค ์„ ๋ฌผ ์ง€์ˆ˜๊ฐ€ ์ปค ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.
frodo๋Š” ์„ ๋ฌผ์„ ๋” ๋งŽ์ด ์คฌ๋˜ ryan์—๊ฒŒ ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.
neo๋Š” ์„ ๋ฌผ์„ ๋” ๋งŽ์ด ์คฌ๋˜ muzi์—๊ฒŒ์„œ ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›๊ณ , ์„ ๋ฌผ์„ ์ฃผ๊ณ ๋ฐ›์ง€ ์•Š์•˜๋˜ frodo๋ณด๋‹ค ์„ ๋ฌผ ์ง€์ˆ˜๊ฐ€ ์ปค ์„ ๋ฌผ์„ ํ•˜๋‚˜ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๋‹ฌ์— ๊ฐ€์žฅ ์„ ๋ฌผ์„ ๋งŽ์ด ๋ฐ›๋Š” ์‚ฌ๋žŒ์€ ryan๊ณผ neo์ด๊ณ  2๊ฐœ์˜ ์„ ๋ฌผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2๋ฅผ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

์˜์‚ฌ ์ฝ”๋“œ ์ž‘์„ฑ

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋Š” ๋™์ž‘ ์ค‘์‹ฌ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ์ˆœ์„œ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์˜์‚ฌ ์ฝ”๋“œ๋ฅผ ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธํ•ด๋ด…๋‹ˆ๋‹ค.

solution(String[] friends, String[] gifts) {
    int n = friends.length;
    // 1. ์ด๋ฆ„ - ์ธ๋ฑ์Šค map ์ƒ์„ฑ
    HashMap<String, Integer> friendsMap;
    for (int i; i < n i++) {
        friendsMap.put(name, i);
    }
    // 2. ์ฃผ๊ณ  ๋ฐ›์€ ์„ ๋ฌผ ๊ฐœ์ˆ˜ matrix ์ƒ์„ฑ
    int[][] giveTakes = new int[n][n];
    // 3. ์‚ฌ๋žŒ ๋ณ„ ์ค€ ์„ ๋ฌผ ๋ฐ›์€ ํ†ต๊ณ„ ํ‘œ ์ƒ์„ฑ
    int[][] giftStats = new int[n][2];

    for (String gift : gifts) {
        String[] giverTakers = split(" ");
        int giver = friendsMap.get(giverTakers[0]);
        int taker = friendsMap.get(giverTakers[1]);
        giveTakes[giver][taker] += 1;
        giftStats[giver][0] += 1;
        giftStats[taker][1] += 1;
    }

    // 4. ๊ฒฐ๊ณผ ๋ฐฐ์—ด ์ƒ์„ฑ
    int[] result = new int[n];

    // matrix ๋ฐ”ํƒ•์œผ๋กœ ๊ฒฐ๊ณผ ๋„์ถœ
    for (int i) {
        for (int j) {
            if (i == i) continue;
            // ์„ ๋ฌผ์„ ๋” ๋งŽ์ด ์ค€ ์นœ๊ตฌ ์ฐพ๊ธฐ
            if (giveTakes[i][j] > giveTakes[j][i]) {
                result[i] += 1;
            } else if (giveTakes[i][j] == giveTakes[j][i]) {
                // ์ง€์ˆ˜ ๋†’์€ ์นœ๊ตฌ ์ฐพ๊ธฐ
                int iStat = giftStats[i][0] - giftStats[i][1];
                int jStat = giftStats[j][0] - giftStats[j][1];
                if (iStat > jStat) {
                    result[i] += 1;
                }
            }
        }
    }

    return result์˜ max ๊ฐ’;
}

 

 

๊ตฌํ˜„

import java.util.HashMap;
import java.util.Arrays;

class Solution {
    public int solution(String[] friends, String[] gifts) {
        int n = friends.length;
        // 1. ์ด๋ฆ„ - ์ธ๋ฑ์Šค map ์ƒ์„ฑ
        HashMap<String, Integer> friendsMap = new HashMap<>();
        for (int i = 0;i < n; i++) {
            friendsMap.put(friends[i], i);
        }
        // 2. ์ฃผ๊ณ  ๋ฐ›์€ ์„ ๋ฌผ ๊ฐœ์ˆ˜ matrix ์ƒ์„ฑ
        int[][] giveTakes = new int[n][n];
        // 3. ์‚ฌ๋žŒ ๋ณ„ ์ค€ ์„ ๋ฌผ ๋ฐ›์€ ํ†ต๊ณ„ ํ‘œ ์ƒ์„ฑ
        int[][] giftStats = new int[n][2];

        for (String gift : gifts) {
            String[] giverTakers = gift.split(" ");
            int giver = friendsMap.get(giverTakers[0]);
            int taker = friendsMap.get(giverTakers[1]);
            giveTakes[giver][taker] += 1;
            giftStats[giver][0] += 1;
            giftStats[taker][1] += 1;
        }

        // 4. ๊ฒฐ๊ณผ ๋ฐฐ์—ด ์ƒ์„ฑ
        int[] result = new int[n];

        // matrix ๋ฐ”ํƒ•์œผ๋กœ ๊ฒฐ๊ณผ ๋„์ถœ
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j) continue;
                // ์„ ๋ฌผ์„ ๋” ๋งŽ์ด ์ค€ ์นœ๊ตฌ ์ฐพ๊ธฐ
                if (giveTakes[i][j] > giveTakes[j][i]) {
                    result[i] += 1;
                } else if (giveTakes[i][j] == giveTakes[j][i]) {
                    // ์ง€์ˆ˜ ๋†’์€ ์นœ๊ตฌ ์ฐพ๊ธฐ
                    int iStat = giftStats[i][0] - giftStats[i][1];
                    int jStat = giftStats[j][0] - giftStats[j][1];
                    if (iStat > jStat) {
                        result[i] += 1;
                    }
                }
            }
        }

        return Arrays.stream(result).max().getAsInt();
    }
}

 

 

๋ณต๊ธฐํ•˜๊ธฐ

๋‹ต์•ˆ๊ณผ ๋‚˜์˜ ํ’€์ด๋ฅผ ๋น„๊ตํ•ด๋ณด์„ธ์š”

์ถ”์ฒœ์„ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›์•˜๋˜ ํ’€์ด

import java.util.*;

class Solution {
    public int solution(String[] friends, String[] gifts) {
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < friends.length; i++) {
            map.put(friends[i], i);
        }
        int[] index = new int[friends.length];
        int[][] record = new int[friends.length][friends.length];

        for (String str : gifts) {
            String[] cur = str.split(" ");
            index[map.get(cur[0])]++;
            index[map.get(cur[1])]--;
            record[map.get(cur[0])][map.get(cur[1])]++;
        }

       int ans = 0;
       for (int i = 0; i < friends.length; i++) {
           int cnt = 0;
           for (int j = 0; j < friends.length; j++) {
               if(i == j) continue;
               if (record[i][j] > record[j][i]) cnt++;
               else if (record[i][j] == record[j][i] && index[i] > index[j]) cnt++; 
           }
           ans = Math.max(cnt, ans);
       }
        return ans;
    }
}
  • ๋‚˜๋„ ๊ฑฐ์˜ ๋น„์Šทํ•˜๊ฒŒ ํ‘ผ ๊ฒƒ ๊ฐ™๋‹ค.
๋ฐ˜์‘ํ˜•