HOME
[Algorithm] 미니맥스 / 알파-베타 가지치기 알고리즘 톺아보기
[Algorithm] 미니맥스 / 알파-베타 가지치기 알고리즘 톺아보기
2024.06.01미니맥스 알고리즘개념💡 제로섬 게임은 한 플레이어가 이득을 얻으면 다른 플레이어는 그만큼 손해를 보는 게임을 가리킨다. 미니맥스 알고리즘은 틱택토, 체스처럼 2명이 참여하는 제로섬 게임에서 가장 널리 사용하는 알고리즘으로, 모든 플레이어가 최선의 수를 둔다고 가정하고 가능한 모든 수를 고려하여 승리할 수 있는 전략을 도출할 때 사용한다. X 플레이어는 승리하기 위해 최대 점수를 얻으려 하고, O 플레이어는 패배하지 않기 위해 최소 점수를 얻으려 하는 상황에서 최적의 해를 찾는 방법이다. 현재 X 플레이어 차례이고, X 플레이어가 선택할 수 있는 곳은 1, 4, 5번 인덱스(Zero-Based)라고 가정해 본다. X가 이기면 +100점, O가 이기면 -100점을 획득한다. 보드의 모든 수를 뒀지만 무승..
[React] 틱택토(Tic-Tac-Toe) 게임 주요 로직 톺아보기
[React] 틱택토(Tic-Tac-Toe) 게임 주요 로직 톺아보기
2024.05.30틱택토 소개틱택토는 2명의 플레이어가 자신의 기호(X, O) 3개를 가로, 세로, 대각선으로 연속해서 놓이도록 하는 보드 게임이다. 게임은 주로 3x3 격자 보드에서 진행된다. 플레이어는 번갈아가면서 자신의 기호를 놓고, 한 칸엔 한 개의 기호만 놓을 수 있다. 모든 칸에 기호를 놓았지만 어느 한쪽도 연속적인 세 개의 기호를 배열하지 못하면 게임은 무승부로 끝난다(무승부가 많은 게임). 승리 조건 체크틱택토는 행렬로 이뤄진 2차원 보드에서 진행하지만, 1차원 배열로 관리하면 각 칸을 단일 인덱스로 접근할 수 있기 때문에 데이터를 더 수월하게 관리할 수 있다. 게임 로직을 구현할 때도 인덱스 계산을 단순화시켜 코드의 복잡성을 줄이는 데 도움이 된다. 또한, 1차원 배열은 그리드 스타일을 이용해 2차원 보..
포르노그래피(음란물)가 미국 기업과 가정에 미치는 영향
포르노그래피(음란물)가 미국 기업과 가정에 미치는 영향
2024.05.30포르노그래피로 인한 업무 손실2010년 2월 닐슨(Nielsen) 연구에 따르면, 업무용 컴퓨터로 포르노 사이트에 접속한 비율 28%업무용 컴퓨터로 포르노 사이트를 방문한 평균 시간 약 13분매월 평균 직원 1명이 이러한 사이트에서 보내는 시간 약 1시간 38분닐슨이 인용한 평균 시간만큼 3,700만 명의 직원이 포르노를 시청한다면, 기업의 연간 생산성 손실액은 169억 달러 미국의 인터넷 포르노그래피 통계매 초 (Every Second)28,258명의 사용자가 인터넷에서 포르노 콘텐츠 시청3,075.64 달러를 포르노 콘텐츠에 지출372명이 검색 엔진에 '성인' 단어 입력 매 일 (Every Day)37개의 포르노 영상 제작25억 통의 포르노 콘텐츠가 포함된 이메일 송수신6,800만 건의 포르노 검색..
[JS] Array.fill() 메서드 사용 시 주의할 점
[JS] Array.fill() 메서드 사용 시 주의할 점
2024.05.30Array.fill() 메서드는 이름 그대로 첫 번째 인자에 주어진 값으로 배열의 모든 요소를 채우는 메서드다. 주로 Array() 생성자와 함께 사용하여, 초기값이 할당된 배열을 생성할 때 유용하게 쓰인다.Array.fill(value, start?, end?)// length가 2인 빈 배열 생성 후 null로 채움const filledArray = Array(2).fill(null);console.log(filledArray); // [null, null]const numbers = [1, 2, 3, 4];// 2~3번 인덱스를 null로 채움 (start 포함, end 미포함)numbers.fill(null, 2, 4);console.log(numbers); // [1, 2, null, null]..
[JS] Bitwise 비트 연산자 톺아보기 (feat. 비트마스크)
[JS] Bitwise 비트 연산자 톺아보기 (feat. 비트마스크)
2024.05.29비트 연산자는 정수의 이진 표현, 즉 비트(0과 1) 단위로 계산하는 연산자다. 주로 성능 최적화, 메모리 절약, 알고리즘 구현 등에서 사용한다. 자바스크립트는 64비트 부동소수점 형식으로 숫자를 저장하지만, 비트 연산을 수행할 땐 내부적으로 피연산자를 32비트 정수로 변환한다. 이는 비트 연산이 정수에만 적용되기 때문. 변환 과정에서 소수부는 버려지고 32비트 정수만 연산에 사용된다. 2의 보수 표현법2의 보수 표현법은 비트를 이용해 음수를 나타내는 표준 방식으로, 정수의 이진 표현에서 모든 비트를 반전시킨 후(1의 보수) 1을 더하는 방식으로 계산한다. 즉, 1의 보수에 1을 더하면 2의 보수가 된다. 이때 최상위 비트(Most Significant Bit; 부호 비트; 가장 왼쪽에 있는 비트)가 ..
[JS] 유니코드와 유니코드 프로퍼티
[JS] 유니코드와 유니코드 프로퍼티
2024.05.29유니코드💡 자바스크립트는 모든 문자열을 UTF-16으로 인코딩한다. UTF-16은 기본적으로 2바이트(16비트)로 인코딩하지만, 2바이트로 표현할 수 없는 이모지, 특수 기호 같은 문자는 서로게이트 페어를 통해 4바이트를 사용한다. 이를 보충 문자라고 부른다. 서로게이트 페어는 U+10000(65536) 이상의 코드 포인트를 표현하기 위해 두 개의 2바이트 코드 조합으로 보충 문자를 표현하는 방식이다. 자바스크립트는 유니코드를 사용해서 문자열을 인코딩한다. 유니코드는 전 세계의 다양한 문자와 기호를 표현할 수 있도록 설계된 국제 표준이다. 유니코드에서 각 문자는 고유한 코드 포인트(해당 문자열을 대표하는 숫자)를 가진다. 코드 포인트는 U+ 접두사와 16진수 숫자를 합친 표기법을 사용한다. 예를들어 알..
[TS] 타입스크립트 클래스(class) 문법, 추상 클래스와 메서드
[TS] 타입스크립트 클래스(class) 문법, 추상 클래스와 메서드
2024.05.29클래스 정의자바스크립트에선 생성자 내부에서 프로퍼티를 선언하고 초기화한다. 클래스 필드를 사용하는 경우를 제외하곤 클래스 바디에 프로퍼티를 따로 선언할 필요가 없다. 반면 타입스크립트에선 먼저 클래스 바디에 프로퍼티를 미리 선언하고 타입을 지정해야 한다. 클래스 바디에 프로퍼티를 선언하지 않으면 에러가 발생한다.class User { name: string; // 프로퍼티 선언 및 타입 지정 constructor(name: string) { this.name = name; // 프로퍼티 초기화 }}const user = new User('John');console.log(user); // { name: 'John' } 타입스크립트에선 public, protected, private 접근 제한자..
[DevTools] 웹에서 VSCode 사용하기 - github.dev / github1s
[DevTools] 웹에서 VSCode 사용하기 - github.dev / github1s
2024.05.29웹에서 레포지토리를 살펴보다가 코드를 좀 더 편하게 들여다보고 싶을 때 github1s 서비스를 이용해서 웹 기반 VSCode 환경으로 볼 수 있다. github1s를 사용하려면 github 도메인 뒤에 1s를 붙여서 github1s.com/... 주소로 이동해야 한다. 보통은 주소를 변경해주는 자바스크립트 코드를 즐겨찾기에 추가해 두고 사용한다.javascript: window.location.href = window.location.href.replace(/github(1s)?.com/, function(match, p1) { return p1 ? 'github.com' : 'github1s.com' }) 그러다 우연히 Github에서 공식으로 제공하는 github.dev라는 서비스를 발견했다. gi..
[AWS] VSCode에서 AWS EC2 원격 연결 / EC2 메모리 부족 해결
[AWS] VSCode에서 AWS EC2 원격 연결 / EC2 메모리 부족 해결
2024.05.29터미널로 AWS EC2에 접속해서 서버 코드를 수정하려면 Nano나 Vim 등을 이용해야 한다. 익숙한 VSCode 환경이 아니기 때문에 오타가 발생할 가능성도 높고, 이 에디터들의 기본 설정은 Linter도 안되기 때문에 불편하다. VSCode 확장 기능을 이용해 AWS EC2에 원격 접속한 후 VSCode에서 코드를 직접 수정할 수 있다. VSCode에서 EC2 인스턴스 SSH 연결❶ VSCode 확장기능 Remote SSH 설치 (링크) ❷ CMD SHIFT P 명령 커맨드 → Remote-SSH: Connect to Host → Configure SSH Hosts → 사용자 수준의 config 파일 클릭 ❸ SSH Config 파일 설정# 입력 예시Host aws-ec2-seoul-privat..
[JS] 바닐라 자바스크립트로 마리오 러너 게임 구현하기
[JS] 바닐라 자바스크립트로 마리오 러너 게임 구현하기
2024.05.29러너 게임(달리기 게임)은 플레이어가 자동으로 전진하면서 장애물을 회피하고, 점수를 획득하는 게임 유형이다. 간단한 러너 게임은 캔버스 없이 JavaScript, HTML, CSS 만으로도 구현할 수 있다. 러너 게임 구현은 크게 ①이동(전진), ②점프, ③장애물 배치, ④장애물 충돌 감지로 나눌 수 있다. 슈퍼 마리오는 플레이어가 캐릭터를 직접 조종하는 플랫포머 장르에 속하지만 친숙한 마리오 캐릭터와 구조물을 이용해서 러너 게임으로 만들어보자. 싱글톤 DOM 관리더보기// dom-manager.jsclass DomManager { static instance = null; constructor() { // 생성자 함수는 기본적으로 새로 생성된 인스턴스(this)를 반환하지만 명시적으로 반환 ..
[HTML] select, option 태그 주요 속성과 특징
[HTML] select, option 태그 주요 속성과 특징
2024.05.29Option 생성자 함수 | MDN💡 HTML 옵션 태그의 selected 어트리뷰트와 자바스크립트로 접근하는 option.selected 속성(프로퍼티)은 서로 독립적인 기능을 가진다. 옵션 태그의 selected 어트리뷰트는 초기 선택 상태를 나타내고, option.selected 속성은 현재 선택 상태를 반영하고 제어하는데 사용한다.// Option 생성자를 사용하면 document.createElement() 보다 더 간결하게 작성할 수 있다new Option(text?, value?, defaultSelected?, selected?) ◼︎ text : 옵션 요소에 표시할 텍스트 | 기본값 "" 빈 문자열text에 지정한 값은 option.textContent로 설정된다.◼︎ value : 옵..
[Algorithm] 순열 / 조합 개념과 알고리즘 구현
[Algorithm] 순열 / 조합 개념과 알고리즘 구현
2024.05.28순열 Permutation개념순열은 서로 다른 n개 요소 중에서 r개를 선택하여 순서대로 나열하는 방법을 의미한다. 순열에선 순서가 결과에 영향을 미치기 때문에 순서가 중요하다. 동일한 요소를 서로 다른 순서로 나열하면, 각각을 별개의 순열로 간주한다. 예를 들어 A, B, C에서 A, B 두 요소를 선택하는 경우 AB와 BA는 서로 다른 순열이다. A 선택, 남은 글자 B, CB 선택, 남은 글자 C (2자리 순열이므로 무시) → ABC 선택, 남은 글자 B (2자리 순열이므로 무시) → ACB 선택, 남은 글자 A, CA 선택, 남은 글자 C (2자리 순열이므로 무시) → BAC 선택, 남은 글자 A (2자리 순열이므로 무시) → BCC 선택, 남은 글자 A, BA 선택, 남은 글자 B (2자리 순열..