
문제를 파악해보자. 이전 문제보다 짧기 때문에 쉽게 파악할 수 있다.
입력값이 될 N과 M은 각각 1이상 100이하의 정수이다.
바구니는 N개 있으며 각 바구니에는 1~N개의 번호가 매겨져 있다.
처음에 각 바구니에는 자신과 같은 번호의 공이 들어있다.
입력의 두번째 줄 부터 입력될 두 정수의 바구니에 공을 서로 교체한다.
첫 줄의 입력중 두 번째 값이 공을 교환할 횟수인 M의 값이다.
int[] fristInputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int[] baskets = new int[fristInputs[0]];
for(int i = 0; i < fristInputs[0]; i++){
baskets[i] = i+1;
}
int temp;
for(int j = 0; j < fristInputs[1]; j++){
int[] inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
temp = baskets[inputs[0]-1];
baskets[inputs[0]-1] = baskets[inputs[1]-1];
baskets[inputs[1]-1] = temp;
}
Console.Write(string.Join(" ", baskets));

값을 교체하기 위해서 temp라는 임시변수를 주어 첫번째 바구니의 공(값)을 담아두고, 원래 첫번째 바구니에 두번째 바구니의 공을 담고, 미리 담아둔 temp에 담긴 공을 두번째 바구니에 담아주는 식으로 풀어 나갔다.
아무리 생각해도 for문을 3번 쓰고싶지 않아서 출력할 때, 배열을 for문으로 도는 로직보단 배열내 요소들을 모두 문자열로 붙여주는 string.join()을 사용하여 출력하였다.
처음에는 계속 틀렸다는 답이 나왔는데 로직적인 문제가 아닌 내가 출력형태를 잘못알고, 요소사이에 ,를 넣어주어서 두 번이나 틀리고 고민하는데,에 의한 문제를 로직적 문제로 착각하여 많은 시간을 소모하였다. ㅠㅠ
var a=F();var r=new int[a[0]];
for(int i=0;i<a[0];i++)r[i]=i+1;
for(int i=0;i<a[1];i++){var b=F();
var t=r[b[0]-1];
r[b[0]-1]=r[b[1]-1];
r[b[1]-1]=t;
}
foreach(var c in r)Console.Write(c+" ");
int[] F()=>Console.ReadLine().Split().Select(int.Parse).ToArray();

가장 짧은 C#코드를 보면 내 코드의 거의 2배 가까이 짧다. 하지만 로직적 내용은 거의다 같고, 변수명의 정의를 간단하게 t, r 등으로 짧게 쓰고, 콘솔로 들어온 값을 숫자배열로 바꾸는 로직으로 따로 F()로 함수화 하여 두번 쓸 것을 짧게 쓰도록 바꾸었다.