deck:: Logseq/coding tip

- ## **파이썬, 자바스크립트 반복문 순회 및 객체/딕셔너리 순회**
	- ### **► 일반적인 반복가능 객체를 활용한 반복문 순회(기본 순회)**
		- **● pythron**
		  id:: 684e9cfd-e828-43ac-9f6c-76492bdcf94a
			- ```python
			  arr = [1,2,3,4,5]
			  
			  for i in arr :
			  	print(i)
			    
			  # 출력
			  # 1 2 3 4 5
			  ```
	-
	- ### **► 자바스크립트의 객체(Object) 는 파이썬의 딕셔너리(Dictionary)**
		- **키(key)와 값(value)을 가지는 데이터의 집합(각각의 언어에서 서로 동일하다고 생각해도 무방함)**
		- **◎ 선언 및 접근방법**
			- **● pythron**
			  id:: 684e9fb3-3cf0-4fa0-8539-e53bfe7fbcc1
				- ```python
				  # 빈데이터 초기화 방법
				  dic = {} # dict()
				  
				  # 직접 선언 방법
				  dic = {
				  "name":  "Yechan",
				  "age" : 30
				  }
				  
				  # 출력
				  print(dic["name"])
				  print(dic["age"])
				  # Yechan
				  # 30
				  ```
		- **◎ 키 및 값 순회(반복문 사용, 순서는 보장되지 않음)**
			- **● pythron**
			  id:: c506e90a-c84b-4498-ba5f-5028f5a874f6
				- ```python
				  dic = {
				  "name":  "Yechan",
				  "age" : 30
				  }
				  
				  # key 순회
				  for key in dic :
				  	print(dic[key])
				  # Yechan
				  # 30
				  
				  # key, value 순회
				  for key, value in dic.items() :
				  	print(key, value)
				  # name Yechan
				  # age 30
				  ```
	-
	- ### **► 파이썬에서 반복가능한 데이터셋의 값과 인덱스를 불러와서 순회하기**
		- **enumerate()**
		  id:: 6857c511-ce76-4075-ba45-a38956deb7df
			- 반복가능한 데이터셋의 값과 인덱스를 튜플형태로 반환하는 함수
			  id:: 6857c541-93f0-441f-8ff1-ca3cf8a3b186
				- ```python
				  arr = ["apple", "banana", "cat"]
				  for i in enumerate(arr) :
				      print(i)
				  # 출력
				  # (0, apple)
				  # (1, banana)
				  # (2, cat)
				  ```
			- 반복문에서 인덱스와 값을 동시에 순회할 수 있음.
			  id:: 6857c6b6-3201-47a1-a090-c0ebe75d5e4c
				- ```python
				  arr = ["apple", "banana", "cat"]
				  for index, value in enumerate(arr) :
				      print(index, value)
				  # 출력
				  # 0 apple
				  # 1 banana
				  # 2 cat
				  ```
			- 시작 인덱스를 바꿀 수도 있음.
			  id:: 6857c623-b8e4-4325-a8c2-27a9446118bd
				- ```python
				  arr = ["apple", "banana", "cat"]
				  for index, value in enumerate(arr, start=1) :
				      print(index, value)
				  # 출력
				  # 1 apple
				  # 2 banana
				  # 3 cat
				  ```
	-
-
-
- ## **비트연산 정리**
	- ### **XOR(배타적 논리합)**
		- 기호 :  ^
		  id:: 684eaf61-54bb-4f69-af87-f75f280bd119
		- 연산값 :  (0,0)->0, (0,1)->1, (1,0)->1, (1,1)->0 [같으면 0, 다르면 1]
		  id:: 684eafb2-7091-4d69-8c3f-0540d687b782
		- 핵심성질
		  id:: 684eaff6-5a2b-4cdd-ba5d-cba163b087fa
			- 같은 값끼리 XOR하면 0이 된다: `a ^ a = 0`
			- 0과 XOR하면 자기 자신이 된다: `a ^ 0 = a`
			- 교환법칙, 결합법칙이 성립한다: `a ^ b = b ^ a`, `(a ^ b) ^ c = a ^ (b ^ c)`
		- 활용
		  id:: 684eb038-f987-419b-b531-2b7a868c0842
		  collapsed:: true
			- 중복되는 여러 수들 중에 단 하나 다른 수를 찾는 방법으로 활용
			  id:: 684eb045-4df8-4943-bdfb-65f983f2704e
				- 모든 수를 하나하나 xor하면 결국 최종적으로 나오는 결과는 다른 하나가 나옴.
				- ```C
				  int arr[] = {1, 2, 3, 2, 1};
				  int res = 0;
				  for(int i=0; i<5; i++) res ^= arr[i];
				  // res == 3 (짝이 없는 값)
				  ```
				- 중복되는 수가 홀수개로 짝지어져 있으면 사용할 수 없음
					- 단 단 하나의 수를 제외한 모든 수가 같은 숫자라면 사용 가능
			- 임시변수 없이 두 변수의 값을 swap
			  id:: 684eb1a1-f13d-45c3-b03b-da9372da5e7c
				- XOR 연산의 성질을 잘 응용하면 아래의 코드처럼 두 변수를 교환할 수 있음.
				- ```C
				  int a = 3;
				  int b = 5;
				  
				  a = a ^ b;
				  b = a ^ b;
				  a = a ^ b;
				  // 이제 a=5, b=3 (값이 서로 바뀜)
				  ```
-