이 방법은 정보처리기사에서 자주 나오는 방법이다. 아니 자주보다 더 많이 나오는 것 같았음... 항상...
처음에는 너무나도 이해가 안돼서 그냥 대각선으로 줄을 그어서 외워버렸었다. 근데 하버드 컴공 강의 듣고 이해됨! 그리고 문제도 많이 풀어보기도 했고.
arr = [5, 3], temp = 5
인 상태이다.
arr = [3, 3], temp = 5
arr = [3, 5], temp = 5
(+ 뽀너스 ) 이제 필요하지 않은 쓰레기값이 되어버린 남은 temp는... cs50 강의는 c언어라서 더이상 메모리를 사용하지 않을거라면 free()를 아마 해줬던 것 같다. free가 맞는지 모르겠는데 여턴 메모리 누수를 막기 위한 작업을 꼭 마무리로 해줬다.
자바스크립트는 이 작업을 자동으로 해준다고 한다.
데이비드 말론 교수님의 컴공 강의.
자바스크립트로 된 강의는 아니지만 아주 강추! 컴퓨터가 연산하는 과정을 이해할 수 있게 해준다.
차근차근 가르쳐주기때문에 따라가기 전혀 어렵지 않음. 하바드 하바드 하는 이유가 있구나 싶었다ㅋㅋㅋ 🥹
https://www.edwith.org/cs50
이건 며칠전에 유튜브를 보다가 진짜 호들짝 놀랐던 방법인데, 알고보니 데일리코딩 레퍼런스에 있더라. 섹션 3 데일리코딩 문제를 다시 풀기로 해서 푸는중인데, 레퍼런스 보고 깜짝 놀랐다.
나는 코딩문제를 풀고 레퍼런스를 잘 보지 않기 때문에(...) 이런 불상사가 일어남ㅋㅋㅋ 진짜 복습 필수다 필수.
처음에 이 개념에 대해 들었을 때는 뭔소리지 했다. 데이터의 구조를 분해하고 할당한다는 말 그대로의 문법이다. 개념적으로 접근하면 어려운데 막상 사용하면 그냥 편리함을 위한 문법이라는 것을 금방 깨달을 수 있음.
const 개린이리스트 = [
{name: 'seolgi', age: 3, gender: 'female' },
{name: 'arong', age: 10, gender: 'male' }
]
let [설기, 아롱이] = 개린이리스트
설기;
{name: 'seolgi', age: 3, gender: 'female'}
설기를 영어로 치면 얼마나 귀찮게요? 그리고 배열에 접근하기 얼마나 귀찮게요? 구조분해할당으로 한글로 할당할 수 있다. 설기만 치면 바로 객체가 반환된다.
쉼표
로 버릴 수도 있다.let 설기 = { 종류: 'pome' };
let {이름 = '설기', 나이 = 3, 성별 = '암컷'} = 설기;
설기 // { 종류: 'pome' }
이름 // '설기'
나이 // 3
[설기, 아롱이] = [아롱이, 설기]
위에서는 이렇게 바로 할당하면 값을 영영 잃어버린다더니, 이게 어떻게 가능한거냐고 물어본다면...
원시값이 아니라 레퍼런스값이라 가능하다. 레퍼런스값은 값 자체가 아니라 값이 있는 주소를 가리킨다는 뜻.
바로 위의 코드에서 설기는 아롱이의 값이 저장된 주소를 할당하게 되고, 아롱이는 설기의 값이 저장된 주소를 할당받게 된다.
그래서 설기를 치면 아롱이 데이터가 반환되고, 아롱이를 치면 설기 데이터가 반환되게 된다. 설기가 살던 주소인 설기동에 아롱이가 이사가고, 아롱이동에 설기가 이사갔다고 생각하면 이해가 쉬울 것 같다.
let arr = [5, 3]
[5, 3] = [3, 5] // ⚠️ error!
[arr[0], arr[1]] = [arr[1], arr[0]]
arr // [3, 5]
이건 진짜 처음 본다.
XOR은 2진법으로 생각해야하는데... 하 귀찮다...
1과 1이 만나면 0,
1과 0이 만나면 1,
0과 0이 만나면 0을 리턴한다.
서로 다른 값이 만나야 1, 같은 값이 만나면 0이다. 이건 진짜 봐도봐도 헷깔림ㅠㅠ
5는 2진법으로 101(2)이고 3은 2진법으로 나타내면 011(2)이다.
let arr = [5, 3]
arr[0] ^= arr[1] //5 ^= 3 일때
//101(2) ^= 011(2)
//110(2) = 6
//arr[0] = 6이 된다.
여기서 arr = [6, 3] 인 상태.
arr[1] ^= arr[0] // 3 ^= 6 일때
// 011(2) ^= 110(2)
// 101(2) = 5
//arr[1] = 5가 된다.
여기서 arr = [6, 5] 인 상태.
arr[0] ^= arr[1] // 6 ^= 5 일때
// 110(2) ^= 101(2)
// 011(2) = 3
// arr[0] = 3이 된다.
여기서 arr = [3, 5] 인 상태.
바꾸고 싶은 값 두개에 xor을 세번 해주면 되는구나... @.@ 숫자는 정말... 신비롭다...