λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“– Problem Solution/Programmers

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 체윑볡 Swift

by Fomagran πŸ’» 2020. 2. 8.
728x90
λ°˜μ‘ν˜•

μ μ‹¬μ‹œκ°„μ— 도둑이 λ“€μ–΄, 일뢀 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆ μ—¬λ²Œ 체윑볡이 μžˆλŠ” 학생이 μ΄λ“€μ—κ²Œ μ²΄μœ‘λ³΅μ„ 빌렀주렀 ν•©λ‹ˆλ‹€. ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 체격 순으둜 맀겨져 μžˆμ–΄, λ°”λ‘œ μ•žλ²ˆν˜Έμ˜ ν•™μƒμ΄λ‚˜ λ°”λ‘œ λ’·λ²ˆν˜Έμ˜ ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 4번 학생은 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€. 체윑볡이 μ—†μœΌλ©΄ μˆ˜μ—…μ„ 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— μ²΄μœ‘λ³΅μ„ 적절히 빌렀 μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

전체 ν•™μƒμ˜ 수 n, μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ lost, μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ reserveκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆλŠ” ν•™μƒμ˜ μ΅œλŒ“κ°’μ„ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • 전체 ν•™μƒμ˜ μˆ˜λŠ” 2λͺ… 이상 30λͺ… μ΄ν•˜μž…λ‹ˆλ‹€.
  • μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ 체윑볡이 μžˆλŠ” ν•™μƒλ§Œ λ‹€λ₯Έ ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 이 학생은 μ²΄μœ‘λ³΅μ„ ν•˜λ‚˜λ§Œ λ„λ‚œλ‹Ήν–ˆλ‹€κ³  κ°€μ •ν•˜λ©°, 남은 체윑볡이 ν•˜λ‚˜μ΄κΈ°μ— λ‹€λ₯Έ ν•™μƒμ—κ²ŒλŠ” μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μ—†μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

nlostreservereturn

n lost reserve return
5 [2, 4] [1, 3, 5] 5
5 [2, 4] [3] 4
3 [3] [1] 2

https://roeldowney.tistory.com/91 μ΄ λΆ„μ˜ μ½”λ“œλ₯Ό μ°Έμ‘°ν–ˆλ‹€.

 

[Swift]ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 체윑볡

체윑볡 문제 - 문제 링크: ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ 풀이 func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int { var total = 0 var reserveValue = reserve.sorted() var lostValue = lost.sorted() for index in..

roeldowney.tistory.com

풀이:

//λ„λ‘‘λ§žμ€ 학생듀과 여뢄이 μžˆλŠ” ν•™μƒλ“€μ˜ 배열을 또 λ‹€λ₯Έ 배열을 λ§Œλ“€μ–΄ 각 각 λ‹΄λŠ”λ‹€ -> νŒŒλΌλ―Έν„° μ•ˆμ˜ 배열은 μƒμˆ˜λ‘œ λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— 값을 λ°”κΏ€ μˆ˜κ°€ μ—†λ‹€.

//학생 수

그리고 학생 숫자λ₯Ό μ…€ λ³€μˆ˜λ„ ν•˜λ‚˜ λ§Œλ“€μ–΄μ€€λ‹€.(studentnumber) 학생 숫자λ₯Ό μ„ΈλŠ” λ³€μˆ˜μ—” μš°μ„ μ€ μžƒμ–΄λ²„λ¦° 학생 수λ₯Ό λΉΌμ„œ μ‹œμž‘ν•΄μ€€λ‹€.

 

//여뢄이 μžˆλŠ” ν•™μƒμ΄μž λ™μ‹œμ— λ„λ‘‘λ§žμ€ 학생

맨 처음 확인해 μ£Όμ–΄μ•Ό ν•  건 도둑 λ§žμ€ 학생 쀑 여뢄이 μžˆλŠ” 학생이 μžˆλŠ” κ°€λ₯Ό μ°Ύμ•„μ•Ό ν•œλ‹€. μ™œλƒν•˜λ©΄ λ‹€μŒ forλ¬ΈλΆ€ν„°λŠ” 여뢄이 μžˆλŠ” 학생 쀑 -1 λ˜λŠ” +1자리 쀑 도둑 λ§žμ€ 학생이 μžˆλŠ”κ°€λ₯Ό 찾을 것 이기 λ•Œλ¬Έμ— 잘λͺ»ν•˜λ©΄ μžμ‹ λ„ λ„λ‘‘λ§žμ•˜λŠ”λ° 여뢄이 μžˆλŠ” μ²΄μœ‘λ³΅μ„ λ‹€λ₯Έ 도둑 λ§žμ€ ν•™μƒμ—κ²Œ 쀄 수 있기 λ•Œλ¬Έμ΄λ‹€. 그리고 학생 μˆ˜μ— +1을 ν•΄μ€€λ‹€. 도둑 λ§žμ•˜μ§€λ§Œ μ–΄μ°¨ν”Ό 여뢄이 μžˆμœΌλ‹ˆ μˆ˜μ—…μ— μ°Έκ°€ν•  수 있기 λ•Œλ¬Έμ΄λ‹€.

//받은 학생 또 λ°›λŠ” κ±° 방지

그리고 또 확인해야할 건 λ°›μ•˜λŠ”λ° 또 받은 학생이 μžˆμ„ 수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ 2,4번 학생이 도둑을 맞고 1번,3번 학생이 여뢄이 μžˆλŠ”λ° 1번 학생이 2번 ν•™μƒμ—κ²Œ μ£Όμ—ˆλŠ”λ° 또 3번 학생이 2번 ν•™μƒμ—κ²Œ 쀄 수 μžˆλŠ” 것을 막아야 ν•œλ‹€.

고둜 λ„λ‘‘λ§žμ€ ν•™μƒμ˜ λ°°μ—΄ μ€‘μ—μ„œ 여뢄이 μžˆλŠ” ν•™μƒμ˜ λ°°μ—΄κ³Ό κ°™μœΌλ©΄ κ·Έ ν•΄λ‹Ή 인덱슀의 숫자λ₯Ό 0으둜 λ§Œλ“€μ–΄μ€€λ‹€.

μˆ«μžκ°€ 0μ΄λΌλŠ” 건 μ£Όμ—ˆκ±°λ‚˜ λ˜λŠ” λ°›μ•˜λ‹€λŠ” κ±Έ μ˜λ―Έν•˜λ„λ‘ ν•œλ‹€. 고둜 λ„λ‘‘λ§žμ€ λ°°μ—΄ 쀑 0인 μΈλ±μŠ€λ‚˜ 여뢄이 μžˆλŠ” λ°°μ—΄ 쀑 0인 μΈλ±μŠ€κ°€ μžˆλ‹€λ©΄ continueλ₯Ό μ΄μš©ν•΄ μ•„λž˜ 싀행문을 κ±΄λ„ˆλ›°λ„λ‘ ν•œλ‹€.

//그리고 λ§ˆμ§€λ§‰μœΌλ‘œ +1 μ΄λ‚˜ -1자리인 숫자λ₯Ό μ°Ύμ•„μ„œ 학생 μˆ˜μ— +1 더해주도둝 ν•œλ‹€.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
/λ„λ‘‘λ§žμ€ 학생듀과 여뢄이 μžˆλŠ” ν•™μƒλ“€μ˜ 배열을 또 λ‹€λ₯Έ 배열을 λ§Œλ“€μ–΄ 각 각 λ‹΄λŠ”λ‹€
    var newreserve = reserve
    var newlost = lost
//학생 수
    var studentnumber = n - lost.count
 
//여뢄이 μžˆλŠ” ν•™μƒμ΄μž λ™μ‹œμ— λ„λ‘‘λ§žμ€ 학생
    for i in 0...reserve.count-1{
        for k in 0...lost.count-1{
        if newlost[k] == newreserve[i] {
            newreserve[i] = 0
            newlost[k] = 0
            studentnumber = studentnumber + 1
            break
        }
        }
    }
        
        for j in 0...newlost.count-1{
            for i in 0...newreserve.count-1 {
//받은 학생 또 λ°›λŠ” κ±° 방지
            if newreserve[i] == 0 || newlost[j] == 0 {
              continue
//그리고 λ§ˆμ§€λ§‰μœΌλ‘œ +1 μ΄λ‚˜ -1자리인 숫자λ₯Ό μ°Ύμ•„μ„œ 학생 μˆ˜μ— +1 더해주도둝 ν•œλ‹€.
            }else if newlost[j] - 1 == newreserve[i] || newlost[j] + 1 == newreserve[i]{
                        newreserve[i] = 0
                        newlost[j] = 0
                studentnumber += 1
                break
                    }
                }
            }
    return studentnumber
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

 

λ‚˜μ˜ 처음 ν’€μ΄λŠ” μ΄κ±°μ˜€λ‹€. λ”•μ…”λ„ˆλ¦¬λ₯Ό ν™œμš©ν•΄μ„œ 풀어보렀 ν–ˆμ§€λ§Œ 자꾸만 ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 5번 7λ²ˆμ—μ„œ ν‹€λ Έλ‹€κ³  λ‚˜μ˜¨λ‹€. λͺ¨λ“  ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ₯Ό λŒ€μž…ν•΄λ΄λ„ ν‹€λ¦° 게 μ—†λŠ”λ° 뭐가 틀린지 λͺ¨λ₯΄κ² λ‹€.... 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
func solution(_ n:Int, _ lost:[Int], _ reserve:[Int]) -> Int {
    var student : Set<Int> = []
    var reservedic = [Int:Int]()
    var lostdic = [Int:Int]()
    var studentnumber = 0
    studentnumber += n - lost.count
    
    for i in 0...lost.count-1{
        lostdic[lost[i]] = 0
    }
    print(lostdic)
    
    for i in 0...reserve.count-1{
        reservedic[reserve[i]] = 1
    }
    let sortreserve = reservedic.keys.sorted()
    print(sortreserve)
    for i in 0...reserve.count-1{
        for k in 0...lost.count-1{
        if lost[k] == reserve[i] {
            reservedic[reserve[i]] = 0
            lostdic[lost[k]] = 1
            studentnumber = studentnumber + 1
        }
        }
        
        for j in 0...lost.count-1{
            if reservedic[reserve[i]] == 1{
                if reserve[i] == lost[j]-1{
                    if lostdic[lost[j]] == 0 {
                student.insert(lost[j])
                reservedic[reserve[i]] = 0
                lostdic[lost[j]] = 1
 
                    }
                    }else if lost[j]+1 == reserve[i]{
                        if lostdic[lost[j]] == 0{
                        student.insert(lost[j])
                        reservedic[reserve[i]] = 0
                        lostdic[lost[j]] = 1
                        }
                    }
                }
            }
       
    }
    print(lostdic,reservedic,student)
    
     studentnumber += student.count
    return studentnumber
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

 
728x90
λ°˜μ‘ν˜•

λŒ“κΈ€