ν‹°μŠ€ν† λ¦¬ λ·°

문제 μ„€λͺ…

μ˜€ν”ˆμ±„νŒ…λ°©

μΉ΄μΉ΄μ˜€ν†‘ μ˜€ν”ˆμ±„νŒ…λ°©μ—μ„œλŠ” μΉœκ΅¬κ°€ μ•„λ‹Œ μ‚¬λžŒλ“€κ³Ό λŒ€ν™”λ₯Ό ν•  수 μžˆλŠ”λ°, 본래 λ‹‰λ„€μž„μ΄ μ•„λ‹Œ κ°€μƒμ˜ λ‹‰λ„€μž„μ„ μ‚¬μš©ν•˜μ—¬ μ±„νŒ…λ°©μ— λ“€μ–΄κ°ˆ 수 μžˆλ‹€.

μ‹ μž…μ‚¬μ›μΈ κΉ€ν¬λ£¨λŠ” μΉ΄μΉ΄μ˜€ν†‘ μ˜€ν”ˆ μ±„νŒ…λ°©μ„ κ°œμ„€ν•œ μ‚¬λžŒμ„ μœ„ν•΄, λ‹€μ–‘ν•œ μ‚¬λžŒλ“€μ΄ λ“€μ–΄μ˜€κ³ , λ‚˜κ°€λŠ” 것을 μ§€μΌœλ³Ό 수 μžˆλŠ” κ΄€λ¦¬μžμ°½μ„ λ§Œλ“€κΈ°λ‘œ ν–ˆλ‹€. μ±„νŒ…λ°©μ— λˆ„κ΅°κ°€ λ“€μ–΄μ˜€λ©΄ λ‹€μŒ λ©”μ‹œμ§€κ°€ 좜λ ₯λœλ‹€.

[λ‹‰λ„€μž„]λ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.

μ±„νŒ…λ°©μ—μ„œ λˆ„κ΅°κ°€ λ‚˜κ°€λ©΄ λ‹€μŒ λ©”μ‹œμ§€κ°€ 좜λ ₯λœλ‹€.

[λ‹‰λ„€μž„]λ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.

μ±„νŒ…λ°©μ—μ„œ λ‹‰λ„€μž„μ„ λ³€κ²½ν•˜λŠ” 방법은 λ‹€μŒκ³Ό 같이 두 가지이닀.

  • μ±„νŒ…λ°©μ„ λ‚˜κ°„ ν›„, μƒˆλ‘œμš΄ λ‹‰λ„€μž„μœΌλ‘œ λ‹€μ‹œ λ“€μ–΄κ°„λ‹€.
  • μ±„νŒ…λ°©μ—μ„œ λ‹‰λ„€μž„μ„ λ³€κ²½ν•œλ‹€.

λ‹‰λ„€μž„μ„ λ³€κ²½ν•  λ•ŒλŠ” 기쑴에 μ±„νŒ…λ°©μ— 좜λ ₯λ˜μ–΄ 있던 λ©”μ‹œμ§€μ˜ λ‹‰λ„€μž„λ„ μ „λΆ€ λ³€κ²½λœλ‹€.

예λ₯Ό λ“€μ–΄, μ±„νŒ…λ°©μ— Muzi와 ProdoλΌλŠ” λ‹‰λ„€μž„μ„ μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ΄ μˆœμ„œλŒ€λ‘œ λ“€μ–΄μ˜€λ©΄ μ±„νŒ…λ°©μ—λŠ” λ‹€μŒκ³Ό 같이 λ©”μ‹œμ§€κ°€ 좜λ ₯λœλ‹€.

Muziλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.
Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.

μ±„νŒ…λ°©μ— 있던 μ‚¬λžŒμ΄ λ‚˜κ°€λ©΄ μ±„νŒ…λ°©μ—λŠ” λ‹€μŒκ³Ό 같이 λ©”μ‹œμ§€κ°€ λ‚¨λŠ”λ‹€.

Muziλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.
Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.
Muziλ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.

Muziκ°€ λ‚˜κ°„ν›„ λ‹€μ‹œ λ“€μ–΄μ˜¬ λ•Œ, Prodo λΌλŠ” λ‹‰λ„€μž„μœΌλ‘œ λ“€μ–΄μ˜¬ 경우 기쑴에 μ±„νŒ…λ°©μ— λ‚¨μ•„μžˆλ˜ Muzi도 Prodo둜 λ‹€μŒκ³Ό 같이 λ³€κ²½λœλ‹€.

Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.
Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.
Prodoλ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.
Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.

μ±„νŒ…λ°©μ€ 쀑볡 λ‹‰λ„€μž„μ„ ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ—, ν˜„μž¬ μ±„νŒ…λ°©μ—λŠ” ProdoλΌλŠ” λ‹‰λ„€μž„μ„ μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ΄ 두 λͺ…이 μžˆλ‹€. 이제, μ±„νŒ…λ°©μ— 두 번째둜 λ“€μ–΄μ™”λ˜ Prodoκ°€ Ryan으둜 λ‹‰λ„€μž„μ„ λ³€κ²½ν•˜λ©΄ μ±„νŒ…λ°© λ©”μ‹œμ§€λŠ” λ‹€μŒκ³Ό 같이 λ³€κ²½λœλ‹€.

Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.
Ryanλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.
Prodoλ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.
Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.

μ±„νŒ…λ°©μ— λ“€μ–΄μ˜€κ³  λ‚˜κ°€κ±°λ‚˜, λ‹‰λ„€μž„μ„ λ³€κ²½ν•œ 기둝이 λ‹΄κΈ΄ λ¬Έμžμ—΄ λ°°μ—΄ recordκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, λͺ¨λ“  기둝이 처리된 ν›„, μ΅œμ’…μ μœΌλ‘œ 방을 κ°œμ„€ν•œ μ‚¬λžŒμ΄ 보게 λ˜λŠ” λ©”μ‹œμ§€λ₯Ό λ¬Έμžμ—΄ λ°°μ—΄ ν˜•νƒœλ‘œ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜λΌ.

μ œν•œμ‚¬ν•­
  • recordλŠ” λ‹€μŒκ³Ό 같은 λ¬Έμžμ—΄μ΄ λ‹΄κΈ΄ 배열이며, κΈΈμ΄λŠ” 1 μ΄μƒ 100,000 μ΄ν•˜μ΄λ‹€.
  • λ‹€μŒμ€ record에 λ‹΄κΈ΄ λ¬Έμžμ—΄μ— λŒ€ν•œ μ„€λͺ…이닀.
    • λͺ¨λ“  μœ μ €λŠ” [μœ μ € 아이디]둜 κ΅¬λΆ„ν•œλ‹€.
    • [μœ μ € 아이디] μ‚¬μš©μžκ°€ [λ‹‰λ„€μž„]으둜 μ±„νŒ…λ°©μ— μž…μž₯ - Enter [μœ μ € 아이디] [λ‹‰λ„€μž„] (ex. Enter uid1234 Muzi)
    • [μœ μ € 아이디] μ‚¬μš©μžκ°€ μ±„νŒ…λ°©μ—μ„œ 퇴μž₯ - Leave [μœ μ € 아이디](ex. Leave uid1234)
    • [μœ μ € 아이디] μ‚¬μš©μžκ°€ λ‹‰λ„€μž„μ„ [λ‹‰λ„€μž„]으둜 λ³€κ²½ - Change [μœ μ € 아이디] [λ‹‰λ„€μž„] (ex. Change uid1234 Muzi)
    • 첫 λ‹¨μ–΄λŠ” Enter, Leave, Change 쀑 ν•˜λ‚˜μ΄λ‹€.
    • 각 λ‹¨μ–΄λŠ” 곡백으둜 κ΅¬λΆ„λ˜μ–΄ 있으며, μ•ŒνŒŒλ²³ λŒ€λ¬Έμž, μ†Œλ¬Έμž, 숫자둜만 μ΄λ£¨μ–΄μ Έμžˆλ‹€.
    • μœ μ € 아이디와 λ‹‰λ„€μž„μ€ μ•ŒνŒŒλ²³ λŒ€λ¬Έμž, μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•œλ‹€.
    • μœ μ € 아이디와 λ‹‰λ„€μž„μ˜ κΈΈμ΄λŠ” 1 μ΄μƒ 10 μ΄ν•˜μ΄λ‹€.
    • μ±„νŒ…λ°©μ—μ„œ λ‚˜κ°„ μœ μ €κ°€ λ‹‰λ„€μž„μ„ λ³€κ²½ν•˜λŠ” λ“± 잘λͺ» 된 μž…λ ₯은 주어지지 μ•ŠλŠ”λ‹€.
μž…μΆœλ ₯ 예
recordresult
["Enter uid1234 Muzi", "Enter uid4567 Prodo","Leave uid1234","Enter uid1234 Prodo","Change uid4567 Ryan"]["Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.", "Ryanλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.", "Prodoλ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.", "Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€."]
μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1
문제의 μ„€λͺ…κ³Ό κ°™λ‹€.



λ“€μ–΄μ˜€κ³  λ‚˜κ°€λŠ”κ±΄ 크게 λ¬Έμ œκ°€ μ—†λŠ”λ° μ€‘μš”ν•œ 것은 Change, 즉 λ‹‰λ„€μž„μ„ λ°”κΎΈλŠ” κ²½μš°μž…λ‹ˆλ‹€.


*****************************************************************************

μ±„νŒ…λ°©μ—μ„œ λ‹‰λ„€μž„μ„ λ³€κ²½ν•˜λŠ” 방법은 λ‹€μŒκ³Ό 같이 두 가지이닀.

  • μ±„νŒ…λ°©μ„ λ‚˜κ°„ ν›„, μƒˆλ‘œμš΄ λ‹‰λ„€μž„μœΌλ‘œ λ‹€μ‹œ λ“€μ–΄κ°„λ‹€.
  • μ±„νŒ…λ°©μ—μ„œ λ‹‰λ„€μž„μ„ λ³€κ²½ν•œλ‹€.

λ‹‰λ„€μž„μ„ λ³€κ²½ν•  λ•ŒλŠ” 기쑴에 μ±„νŒ…λ°©μ— 좜λ ₯λ˜μ–΄ 있던 λ©”μ‹œμ§€μ˜ λ‹‰λ„€μž„λ„ μ „λΆ€ λ³€κ²½λœλ‹€.

*****************************************************************************

이 점을 κ³ λ €ν•΄μ„œ ν•΄κ²° μˆœμ„œλ₯Ό μ„Έμš°μžλ©΄


1. 주어진 자료 recordλ₯Ό {"아이디" : "이름" } 의 κ°μ²΄ν˜•νƒœλ‘œ λ³€ν™˜

2. 객체둜 λ³€ν™˜ν•˜λŠ” κ³Όμ •μ—μ„œ μ•„μ΄λ””λŠ” λ™μΌν•œλ° 이름이 λ°”λ€ŒλŠ” 경우λ₯Ό 체크

3. μ±„νŒ…λ°© λ°–μ—μ„œ λ³€κ²½ν•˜λŠ” 것은 λ°μ΄ν„°μ˜ 변화에 ν•΄λ‹Ήλ˜μ§€ μ•Šκ³ , μ±„νŒ…λ°© μ•ˆμ—μ„œ 바뀐 κ²ƒλ§Œ ν•΄λ‹Ήλ˜κΈ° λ•Œλ¬Έμ— Change 만 해당됨.

4. Change 행동에 λŒ€ν•΄ λ³€κ²½λœ 이름을 λŒ€μΉ˜ν•˜μ—¬ 원본 데이터 λ³€κ²½ ν›„ return


μ½”λ“œλ₯Ό ν•œλ²ˆμ— λ‹€ μž‘μ„±ν•˜μ§€ μ•Šκ³  λ‹¨κ³„λ³„λ‘œ κ²°κ³Όλ₯Ό ν™•μΈν•΄κ°€λ©΄μ„œ 쓰도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.


1단계 : 주어진 recordλ₯Ό λ°°μ—΄λ‘œ μ •λ¦¬ν•˜κΈ°

1
2
3
4
5
6
7
8
9
10
11
12
13
function solution(record) {
    var nick = {}, a = record.map(v => v.split(' '))    
    console.log(a)
}
 
let record = [
    "Enter uid1234 Muzi"
    "Enter uid4567 Prodo",
    "Leave uid1234",
    "Enter uid1234 Prodo",
    "Change uid4567 Ryan"
]
solution(record)
cs


κ²°κ³Ό κ°’

[ [ 'Enter', 'uid1234', 'Muzi' ],

  [ 'Enter', 'uid4567', 'Prodo' ],

  [ 'Leave', 'uid1234' ],

  [ 'Enter', 'uid1234', 'Prodo' ],

  [ 'Change', 'uid4567', 'Ryan' ] ]


=> 주어진 recordκ°€ λ„μ–΄μ“°κΈ°λ‘œ κ΅¬λΆ„λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— μ‚¬μš©ν•˜κΈ° μ‰½κ²Œ split()λ₯Ό μ΄μš©ν•΄μ„œ λ°°μ—΄ν˜•νƒœλ‘œ 데이터λ₯Ό λ§Œλ“€μ–΄μ€λ‹ˆλ‹€.



2단계 : μ•„μ΄λ””λŠ” λ™μΌν•œλ° 이름이 λ°”λ€ŒλŠ” 경우λ₯Ό 객체에 λ‹΄μŒ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(record) {
    var nick = {}
    var a = record.map(v => v.split(' '))    
        a.slice().reverse().forEach(v=> {
            if(v[2&& !nick[v[1]]){
                nick[v[1]] = v[2]
            }
        })
    console.log(nick)
}
 
let record = [
    "Enter uid1234 Muzi"
    "Enter uid4567 Prodo",
    "Leave uid1234",
    "Enter uid1234 Prodo",
    "Change uid4567 Ryan"
]
solution(record);
cs


κ²°κ³Ό κ°’

{ uid4567: 'Ryan', uid1234: 'Prodo' }


=> 주어진 recordμ—μ„œ Change 행동은 ν•œ 개 밖에 μ—†μ§€λ§Œ 이름을 λ°”κΎΈλŠ” 방법은 두 가지 μž…λ‹ˆλ‹€. uid1234 μ‚¬μš©μžκ°€ μ±„νŒ…λ°© λ°–μ—μ„œ 이름을 λ°”κΏ¨λ‹€κ³  λ³Ό 수 있기 λ•Œλ¬Έμ— 두 개의 객체정보λ₯Ό λ°˜ν™˜ν•˜κ²Œ 되죠.

sliceλ₯Ό ν•˜λŠ” μ΄μœ λŠ” 얕은 볡사λ₯Ό ν•˜κΈ° μœ„ν•¨μΈλ° slice λ₯Ό 쓰지 μ•ŠμœΌλ©΄ 원본 record 배열이 reverse λ˜μ–΄λ²„λ¦½λ‹ˆλ‹€. μ±„νŒ…λ°©μ˜ μˆœμ„œκ°€ μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμ— 이점을 μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.



3단계 : μ΅œμ’…μ μœΌλ‘œ λ‚˜μ˜€λŠ” 좜λ ₯문을 μž‘μ„±ν•œλ‹€. (이름이 바뀐 경우λ₯Ό μˆ˜μ •ν•΄μ„œ 좜λ ₯)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function solution(record) {
    var nick = {}
    var a = record.map(v => v.split(' '))    
        a.slice().reverse().forEach(v=> {
            if(v[2&& !nick[v[1]]){
                nick[v[1]] = v[2]
            }
        })    
    return a.filter(v => { return v[0!== 'Change' }).map(v => { return v[0=== 'Enter' ? nick[v[1]] + 'λ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.' : nick[v[1]] + 'λ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.' })
}
 
let record = [
    "Enter uid1234 Muzi"
    "Enter uid4567 Prodo",
    "Leave uid1234",
    "Enter uid1234 Prodo",
    "Change uid4567 Ryan"
]
console.log(solution(record));
cs


κ²°κ³Ό κ°’

[ 'Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.',

  'Ryanλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.',

  'Prodoλ‹˜μ΄ λ‚˜κ°”μŠ΅λ‹ˆλ‹€.',

  'Prodoλ‹˜μ΄ λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€.' ]


=> 기본적으둜 좜λ ₯문은 λ“€μ–΄μ˜€κ³  λ‚˜κ°€λŠ” κ²½μš°μ—λ§Œ λ°œμƒν•©λ‹ˆλ‹€. filterλ₯Ό 톡해 Changeκ°€ μ•„λ‹Œ 경우λ₯Ό λ°°μ—΄λ‘œ λ°˜ν™˜ μ‹œν‚΅λ‹ˆλ‹€. κ·Έ 배열을 map을 μ΄μš©ν•˜μ—¬ μˆœνšŒν•˜λŠ”λ°, Enter일 κ²½μš°λŠ” λ“€μ–΄μ™”μŠ΅λ‹ˆλ‹€. λΌλŠ” λ¬Έμž₯을 좜λ ₯ν•˜κ³  μ—¬κΈ°μ„œ μ€‘μš”ν•œ 것은 μ•„κΉŒ λ§Œλ“€μ–΄λ†¨λ˜ nick κ°μ²΄μž…λ‹ˆλ‹€. 


Enterλ‚˜ Leave에 λ‹΄κ²¨μžˆλŠ” uid κ°’κ³Ό nick 객체에 μžˆλŠ” uid 값을 λ§€μΉ­ν•˜μ—¬ uid ν‚€κ°€ κ°–κ³ μžˆλŠ” value 값을 좜λ ₯ μ‹œν‚΅λ‹ˆλ‹€. 



{ uid4567: 'Ryan', uid1234: 'Prodo' }


μ•„κΉŒ 이런 nick 객체λ₯Ό λ§Œλ“€μ–΄λ†¨μ—ˆμ£ ? 그럼 uid4567의 아이디λ₯Ό 가진 이름은 Ryan으둜 μ „λΆ€ λ°”λ€” κ²ƒμž…λ‹ˆλ‹€.

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2025/01   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
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
κΈ€ 보관함