Skip to main content

Basic

⚠️ 중요, 문제 풀이 원칙

1.지문을 꼼꼼히 읽는다.

  • 놓치기 쉬운 조건들을 마킹한다.
  • 엣지 테스트 케이스를 찾는다.
    • 시간복잡도/공간복잡도의 특이점
    • 입력의 특이점

2.코드를 작성하지 말고 로직을 기록한다.

  • 로직이 먼저 선행되어야 한다.

3.그리고 코드를 작성한다.

시간복잡도 계산

1억번 연산 = 1초 

= 2**26 = 67108864 - 한계
= 2**27 = 134217728

= 2**16 = 43046721 - 한계
= 3**17 = 129140163

Boolean, Number

📌 결합 법칙, 교환 법칙

결합 법칙, 교환 법칙

  • XOR(⊕), AND(⋅), OR(+) 연산은 모두 교환 법칙과 결합 법칙이 성립
  • 교환 법칙 : 연산자 기준 변수를 앞뒤를 바꿔도 된다.
    • eg) a ^ b ^ c ^ d ^ e 에서 뒤에서 4개만 먼저 앞으로 끌어올리가 가능.
  • 결합 법칙 : 연산자 기준 뒤에서 먼저 계산해도 된다.
    • eg) a ^ b ^ c ^ d ^ e 에서 뒤에서 2개 먼저 계산, 앞에서 2개 먼저 계산, 그리고 나머지 계산해도 된다.

📌 AND, OR, XOR 연산

eg - https://app.codility.com/programmers/lessons/2-arrays/odd_occurrences_in_array/

AND 연산의 의미

정확한 의미: 왼쪽부터 평가해서 Falsy 값을 만나면 즉시 그 Falsy 값을 반환하고, 더 이상 평가를 진행하지 않습니다. 모든 값이 Truthy라면, 마지막 값을 반환합니다.

의미1. Falsy 값을 골라내기
- 왼쪽부터 평가해서 Falsy 값을 만나면 즉시 그 Falsy 값을 반환.
의미2. 전체가 Truthy 인가?
- 모두 Truthy 값이라면 마지막 변수가 선택되니 전체가 Truthy가 된다.

eg)
- 1 && 0 && 1 && 0 => 0
- 'h' && false && 100 => false
- 100 && 200 && 300 && 0 => 0
- 'h' && 'e' && 'w' => 'w'
- const loading = 1 && 0 && 1 && 0; // 로딩중 아님.

OR 연산의 의미

정확한 의미: 왼쪽부터 평가해서 Truthy 값을 만나면 즉시 그 Truthy 값을 반환하고, 더 이상 평가를 진행하지 않습니다. 모든 값이 Falsy라면, 마지막 값을 반환합니다.

의미1. Truthy 값을 골라내기
- 왼쪽부터 평가해서 Truthy 값을 만나면 즉시 그 Truthy 값을 반환 후 평가 중단.

의미2. 하나라도 Truthy 인가?
- 의미1의 반환값에 의해 사용.

의미3. 전체가 Falsy가 인가?
- 모두 Falsy 값이라면 마지막 변수가 선택된다. 그래서 전체가 Falsy가 된다.
- 의미2가 아닌 경우.

eg)
- 1 || 0 || 1 || 0 => 1
- false || 'h' || 100 => 'h'
- 0 || 100 || 200 || 300 => 100
- 'h' || 'e' || 'w' => 'h'
- undefined || '0' => '0'
- const initValue = undefined || '10' // 적어도 '10'은 보장

XOR 논리 연산 의미

// XOR 논리 비트 의미 
의미 1. 두 명제 중 오직 하나만 참일 때 (True)을 반환

- 두 비트가 다르면 1, 같으면 0을 결과 비트에 써서 리턴
5 = 0101 (이진수)
3 = 0011 (이진수)
0101 ^ 0011 = 0110 (이진수)
0110 = 6 (십진수)

// XOR 논리 연산 +비트 의미
의미 2. 0은 보존, 1은 상쇄
- 0 ^ 5 = 5 ( 000 ^ 101 => 101 ) => 보존
- 5 ^ 5 = 0 ( 111 ^ 111 => 000 ) => 상쇄

의미 3. 매핑이 없는 변수 반환
- 1 ^ 1 ^ 5 ^ 2 ^ 2 = 12는 모두 짝이 존재한다. 5는 짝이 없다.

1 ^ 1 ^ 5 ^ 2 ^ 2 (교환법칙에 의해 위치 변경 가능)
= 1 ^ 1 ^ 2 ^ 2 ^ 5 (결합법칙에 의해 앞에서 먼저 계산 가능)
= 0 ^ 5 (XOR의 보존에 의해 5 반환 )
= 5