JavaScript

배열 나누어 각각 담기

동띠기 2020. 8. 27. 22:37
728x90

코드잇 팀나누기 실습 코드입니다. 

문제는 아래와 같습니다.

 

오늘은 풋살 동아리 경기가 있는 날입니다. 총인원 10명이서 5명씩 팀을 나누려고 하는데요.

실력이 비슷한 사람들끼리 가위바위보를 했고, 이긴사람이 0번 index, 진 사람이 1번 index 배열을 만들어 정리했습니다.

다음 groups 배열을 가지고, 이긴 사람끼리 그리고 진 사람끼리 팀을 나눠 teams 배열을 완성해 주세요.

 

let groups = [
	['영준', '캡틴'], 
	['태순', '우재'], 
	['재훈', '지웅'], 
	['윤형', '동욱'], 
	['규식', '소원']
]

let teams = [
	[],
	[]
];

for(let i = 0; i < groups.length; i++) {
  for(let j = 0; j < groups[i].length; j++) {
    teams[j][i] = groups[i][j];
  }
}

console.log(teams[0]);
console.log(teams[1]);

솔직히 이런생각은 못한것 같다. 풀이를 하자면 

0,0 / 1,0 / 2,0 / 3,0 / 4,0 = 영준 태순 재훈 윤형 규식은 승자이다.

0,1 / 1,1 / 2,1 / 3,1 / 4,1 = 캡틴 우재 지웅 동욱 소원은 패자이다.

 

teams라는 배열에 이긴 사람은 이긴사람끼리 teams[0] 자리에 담고

진 사람은 teams[1]에 담으면 된다.

 

for문에서 모든게 결정이 나는 코드이다. 

 

for(let i = 0; i < groups.length; i++) 

첫번째 반복문부터 해석해보자 . 

변수 i를 선언하고 groups.length 만큼 반복하고 1씩 증가한다. 

groups.length는 전체 배열의 길이를 나타냄으로 5가 출력이 될 것이다. 즉 5번 반복한다.

 

 

for(let j = 0; j < groups[i].length; j++)

 

두번째 반복문 해석이다.

변수 j를 선언하고 groups[i] 번쨰의 길이만큼 반복하고 1씩 증가한다.

groups[i] 번쨰의 길이는 ? 2이다. 그리고 2로 계속 고정일 것이다. 두번쨰 반복문은 2번만 반복하고 종료된다.

 

 

teams[j][i] = groups[i][j];

 

솔직히 손코딩을 해보면 더 쉽겠지만, 표로 표현해 보자.

 

i j
0 0
1
1 0
1
2 0
1
3 0
1
4 0
1

 

이런 형식으로 반복이 된다. 그럼 마지막

teams[j][i] = groups[i][j]; 여기에 대입해보면 정답이 쉽게 나온다.

 

솔직히 생각하지 못했다. 내가 개인적으로 푼 방법은 reverse() 함수를 사용해서 고정값으로 넣었다.

풀어놓고 정말 이마를 탁 치고 아 내가 생각이 짧고 아직 실력이 부족하구나 라는 것을 매일 느끼지만 다시한번 느꼈다.

열공하자 ..

728x90