Algorithm

[Algorithm] λ‚˜λ¨Έμ§€ ν•œ 점 (ternary(?:), XOR(^), map)

_보름 2021. 3. 19. 16:11

πŸ–₯ 문제

μ§μ‚¬κ°ν˜•μ„ λ§Œλ“œλŠ” 데 ν•„μš”ν•œ 4개의 점 쀑 3개의 μ’Œν‘œκ°€ μ£Όμ–΄μ§ˆ λ•Œ, λ‚˜λ¨Έμ§€ ν•œ 점의 μ’Œν‘œλ₯Ό κ΅¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€. 점 3개의 μ’Œν‘œκ°€ λ“€μ–΄μžˆλŠ” λ°°μ—΄ vκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ§μ‚¬κ°ν˜•μ„ λ§Œλ“œλŠ” 데 ν•„μš”ν•œ λ‚˜λ¨Έμ§€ ν•œ 점의 μ’Œν‘œλ₯Ό return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”. 단, μ§μ‚¬κ°ν˜•μ˜ 각 변은 xμΆ•, y좕에 ν‰ν–‰ν•˜λ©°, λ°˜λ“œμ‹œ μ§μ‚¬κ°ν˜•μ„ λ§Œλ“€ 수 μžˆλŠ” 경우만 μž…λ ₯으둜 μ£Όμ–΄μ§‘λ‹ˆλ‹€.

πŸ€” 풀이 방법

[[1, 4], [3, 4], [3, 10], [1, 10]] -> 1, y : 2개, 3, y : 2개...
4개의 μ’Œν‘œλ‘œ μ§μ‚¬κ°ν˜•μ„ λ§Œλ“€λ©΄ 각 점을 μ΄λ£¨λŠ” μ’Œν‘œλŠ” 2κ°œμ”© μ€‘λ³΅λœλ‹€. 이λ₯Ό μ΄μš©ν•˜λ©΄ 문제λ₯Ό κ°„λ‹¨ν•˜κ²Œ ν’€ 수 μžˆλ‹€.

if둜 κ΅¬ν˜„

if v[0][0] == v[1][0] { ans[0] = v[2][0] }

  • 첫 번째 점과 두 번째 점의 xμ’Œν‘œκ°€ κ°™μœΌλ©΄ μ„Έ 번째 점의 xμ’Œν‘œκ°€ 닡이 λœλ‹€.

ternary둜 κ΅¬ν˜„

ifλ₯Ό μ΄μš©ν•˜μ—¬ κ΅¬ν˜„ν•œ 것을 ternary둜 κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆλ‹€.

  • a ? b : c : aκ°€ 참이면 bλ₯Ό μ‹€ν–‰ν•˜κ³  거짓이면 cλ₯Ό μ‹€ν–‰ν•œλ‹€.

XOR μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„

좜처 : https://swift.org

ans[0] = ans[0]^arrayV.first!

  • ans[0]에 v의 xμ’Œν‘œλ₯Ό λ„£κ³  이λ₯Ό XOR연산을 ν•΄μ€€λ‹€.

map으둜 κ΅¬ν˜„

v.map{$0[0]}.reduce(0, ^)

  • xμ’Œν‘œμ˜ 첫 번째 값을 뽑아 이λ₯Ό ^(XOR) μ—°μ‚°ν•΄ μ€€λ‹€.

πŸ‘©πŸ»‍πŸ’» Swift Code

if둜 κ΅¬ν˜„

import Foundation

func solution(_ v: [[Int]]) -> [Int]
{
    var ans = [Int](repeating: 0, count: 2)

    if v[0][0] == v[1][0] {
        ans[0] = v[2][0]
    } else if v[0][0] == v[2][0] {
        ans[0] = v[1][0]
    } else if v[1][0] == v[2][0] {
        ans[0] = v[0][0]
    }

    if v[0][1] == v[1][1] {
        ans[1] = v[2][1]
    } else if v[0][1] == v[2][1] {
        ans[1] = v[1][1]
    } else if v[1][1] == v[2][1] {
        ans[1] = v[0][1]
    }

    return ans
}

ternary둜 κ΅¬ν˜„

import Foundation

func solution(_ v: [[Int]]) -> [Int]
{
    var ans = [Int](repeating: 0, count: 2)

    ans[0] = v[0][0] == v[1][0] ? v[2][0] : (v[0][0] == v[2][0] ? v[1][0] : v[0][0])
    ans[1] = v[0][1] == v[1][1] ? v[2][1] : (v[0][1] == v[2][1] ? v[1][1] : v[0][1])

    return ans
}

xor μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„

import Foundation

func solution(_ v: [[Int]]) -> [Int]
{
    var ans = [Int](repeating: 0, count: 2)

    for arrayV in v {
        ans[0] = ans[0]^arrayV.first!
        ans[1] = ans[1]^arrayV.last!
    }

    return ans
}

map으둜 κ΅¬ν˜„

import Foundation

func solution(_ v: [[Int]]) -> [Int]
{
    var ans = [Int](repeating: 0, count: 2)

    ans[0] = v.map{$0[0]}.reduce(0, ^)
    ans[1] = v.map{$0[1]}.reduce(0, ^)

    return ans
}

 

 

μ•Œκ³ λ¦¬μ¦˜ 문제 ν•΄μ„€ - λ‚˜λ¨Έμ§€ ν•œ 점

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ λͺ¨μ˜ν…ŒμŠ€νŠΈλŠ” ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ μ‹œμŠ€ν…œμ— μ΅μˆ™ν•΄μ§€κΈ° μœ„ν•œ ν…ŒμŠ€νŠΈμ΄λ©°, 문제 μžμ²΄λŠ” 2018 1ST KAKAO BLIND RECRUITMENT와 μ „ν˜€ κ΄€κ³„μ—†μŠ΅λ‹ˆλ‹€. λ‹€λ§Œ λͺ¨μ˜ν…ŒμŠ€νŠΈμ˜ 풀이에 λŒ€ν•œ μš”μ²­μ΄ μžˆμ–΄

programmers.co.kr