https://school.programmers.co.kr/learn/courses/30/lessons/178871
코드
-C++
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<string> solution(vector<string> players, vector<string> callings) {
//vector<string> answer;
map<string, int> m;
for(int i=0;i<players.size();i++){
m.insert({players[i], i});
}
for(int i=0;i<callings.size();i++){
string temp;
int idx = m[callings[i]];
temp=players[idx];
players[idx]=players[idx-1];
players[idx-1]=temp;
m[callings[i]]--;
m[players[idx]]++;
}
return players;
}
-C#
using System;
using System.Collections.Generic;
public class Solution {
public string[] solution(string[] players, string[] callings) {
string[] answer = new string[] {};
Dictionary<string, int> dicOrder = new Dictionary<string, int>();
for(int i=0;i<players.Length;i++){
dicOrder.Add(players[i], i);
}
for(int i=0;i<callings.Length;i++){
int idx = dicOrder[callings[i]];
string temp = players[idx];
players[idx]=players[idx-1];
players[idx-1]=temp;
dicOrder[players[idx]]++;
dicOrder[players[idx-1]]--;
}
return players;
}
}
풀이
처음 플레이어 순서를 map(C#에서 딕셔너리마냥 쓰는 애, 구조가 같지는X)에 저장(이름->키, 순서->값)
callings를 순회하면서 players와 map(C++) or Dictionary(C#)를 갱신.
다른 풀이
using System;
using System.Collections.Generic;
public class Solution {
public string[] solution(string[] players, string[] callings) {
int n = players.Length;
string[] answer = new string[n];
Dictionary<string, int> dicOrder = new Dictionary<string, int>();
Dictionary<int, string> dicOrder2 = new Dictionary<int, string>();
for(int i=0;i<players.Length;i++){
dicOrder.Add(players[i], i);
dicOrder2.Add(i, players[i]);
}
for(int i=0;i<callings.Length;i++){
int idx = dicOrder[callings[i]];
dicOrder2[idx]=dicOrder2[idx-1];
dicOrder2[idx-1]=callings[i];
dicOrder[callings[i]]--;
dicOrder[dicOrder2[idx]]++;
}
for(int i=0;i<players.Length;i++){
answer[i]+=dicOrder2[i];
}
return answer;
}
}
풀이
딕셔너리를 순위가 키, 사람이 값 / 사람이 키, 순위가 값인 딕셔너리 두 개를 선언한다.
두 개의 딕셔너리를 callings를 순회하면서 갱신.
순위가 키인 딕셔너리는 값을 키가 1 작은 값과 서로 바꾸고, 사람이 키인 딕셔너리는 callings[i]의 값을 줄이고, 그 전 애의 값을 늘린다.
그 다음 for문으로 순회하면서 순위가 키인 딕셔너리의 키 값이 작은 순으로 answer에 값을 할당한다.
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/C#] 서울에서 김서방 찾기 (0) | 2024.03.13 |
---|---|
[프로그래머스/C++, C#] 두 원 사이의 정수 쌍 (0) | 2024.03.04 |
[프로그래머스/C++] 광물 캐기 (0) | 2024.02.28 |
[프로그래머스/C++] 산 모양 타일 (0) | 2024.02.26 |
[프로그래머스/C++, C#] 네트워크 (0) | 2024.02.19 |