전체 글 56

제너레이터(Generator) 함수

📌 개요제너레이터는 함수이자 문법이다. function* 키워드로 정의되며 이 문법을 사용해 생성된 함수는 제너레이터 함수가 되고, 그 함수는 이터러블이자 이터레이터인 제너레이터 객체를 반환한다. 📘 주요 개념🔍 이터러블 (Iterable)for ... of 문 등에서 반복 가능한 객체 (예: Array, Set, Map, 문자열 등) 로 Symbol.iterator() 메서드를 가진 객체Symbol.iterator()를 호출하면 이터레이터를 반환함const iterable = { [Symbol.iterator]() { return { next() { ... } }; // 이터레이터 반환 }}; 🔍 이터러블 프로토콜 (Iterable Protocol)JavaScript에서 반복 가능한 객..

공부/JavaScript 2025.05.06

[디자인 패턴] 반복자 패턴 (Iterator Pattern)

📌 개요반복자 패턴(Iterator Pattern)은 컬렉션(리스트, 배열 등)의 내부 구조를 노출하지 않으면서도 그 요소들에 순차적으로 접근할 수 있도록 해주는 디자인 패턴이다. 이 패턴은 **GoF(Gang of Four)**가 정의한 23가지 디자인 패턴 중 하나이며, 객체지향 설계에서 매우 자주 사용되는 구조적인 패턴 중 하나이다.🎯 목적컬렉션 객체의 구현을 변경할 필요 없이, 데이터를 순차적으로 접근할 수 있는 방법을 제공한다.🧱 구조반복자 패턴은 일반적으로 다음과 같은 구성 요소로 이루어진다:Iterator: 컬렉션을 순회하는 인터페이스를 정의Concrete Iterator: 실제 순회 로직을 구현한 구체적인 반복자.Aggregate: 순회할 수 있는 컬렉션 객체를 정의하는 인터페이스Co..

공부/ETC 2025.04.29

[Baekjoon] 큐 2

문제정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.명령은 총 여섯 가지이다.push X: 정수 X를 큐에 넣는 연산이다.pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 큐에 들어있는 정수의 개수를 출력한다.empty: 큐가 비어있으면 1, 아니면 0을 출력한다.front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.입력첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의..

[Backjoon] 창문 닫기

문제서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다.  2번째 사람은 2의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다. 이러한 행동을 N번째 사람까지 진행한 후 열려 있는 창문의 개수를 구하라. 단, 처음에 모든 창문은 닫혀 있다.예를 들어 현재 3개의 창문이 있고 3명의 사람이 있을 때,1번째 사람은 1의 배수인 1,2,3번 창문을 연다. (1, 1, 1)2번째 사람은 2의 배수인 2번 창문을 닫는다. (1, 0, 1)3번째 사람은 3의 배수인 3번 창문을 닫는다. (1, 0, 0)결과적으로 마지막에 열려 있는 창문의 개수는 1개 이다.입력첫 번째 줄에는 창문의 개수와 사람..

[Baekjoon] 나는야 포켓몬 마스터 이다솜

문제오박사 : 그럼 다솜아 이제 진정한 포켓몬 마스터가 되기 위해 도감을 완성시키도록 하여라. 일단 네가 현재 가지고 있는 포켓몬 도감에서 포켓몬의 이름을 보면 포켓몬의 번호를 말하거나, 포켓몬의 번호를 보면 포켓몬의 이름을 말하는 연습을 하도록 하여라. 나의 시험을 통과하면, 내가 새로 만든 도감을 주도록 하겠네.입력첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 물어봐도 괜찮아. 나는 언제든지 질문에 답해줄 준비가 되어있어.둘째 줄부터 N개의 줄에 포켓몬의 번호가 1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력으로 들어와. 포켓..

AWS S3 file upload 미리보기 문제 (presigned url)

문제기존 업로드 되어있던 svg 파일은 NextJS Image 에 cdn url로 미리보기가 가능했지만 새로 업로드 한 svg 는 이미지가 보이지 않음 ( 같은 방식으로 업로드 한 png 는 잘 보임 ) 해결과정첫번째, 기존에 업로드 되어 있던 svg 는 미리보기가 가능했으므로 기존파일과 api를 통해 새로 넣은 svg 파일을 비교했다.=> 두 파일의 다른점은 type 이었다. 기존 파일은 image, 새로 업로드 한 파일은 binary두번째, 업로드 되는 파일의 정보는 백엔드에서 전달받은 그대로 보냈는데 확인해보니 파일의 Content-Type이 지정되어 있지 않았던걸 확인했다.세번째, svg 파일일 경우 "Content-Type": "image/svg+xml" 로 보냈더니 미리보기가 정상 작동 되는걸..

공부/ETC 2025.02.04

[Baekjoon] 좌표 압축

문제수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.입력첫째 줄에 N이 주어진다.둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.출력첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.제한1 ≤ N ≤ 1,000,000-109 ≤ Xi ≤ 109첫 번째 시도사실 문제 자체는 이해하기 어려워서 구글링을 통해 이해했다. 이해하고 나니 풀이는 바로 생각났고 메모리나 시간제한만 신경 쓰면 될 것 같..

[Baekjoon] 알고리즘 수업 - 알고리즘의 수행 시간 6

문제오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.MenOfPassion 알고리즘은 다음과 같다.MenOfPassion(A[], n) { sum 입력첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.출력첫째 줄에 코드1 의 수행 횟수를 출력한다.둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.풀이알고리즘의 수행 시간 5 와 비슷한 문제였다.실행 횟수를 구하기 위해 삼중 for..

[Baekjoon] 알고리즘 수업 - 알고리즘의 수행 시간 5

문제오늘도 서준이는 알고리즘의 수행시간 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.입력의 크기 n이 주어지면 MenOfPassion 알고리즘 수행 시간을 예제 출력과 같은 방식으로 출력해보자.MenOfPassion 알고리즘은 다음과 같다.MenOfPassion(A[], n) { sum 입력첫째 줄에 입력의 크기 n(1 ≤ n ≤ 500,000)이 주어진다.출력첫째 줄에 코드1 의 수행 횟수를 출력한다.둘째 줄에 코드1의 수행 횟수를 다항식으로 나타내었을 때, 최고차항의 차수를 출력한다. 단, 다항식으로 나타낼 수 없거나 최고차항의 차수가 3보다 크면 4를 출력한다.첫 시도 - 오답const fs = require('fs');const filePat..

진법 변환 (toString, parseInt)

Number 객체 내장함수 toString() 함수와 전역함수인 parseInt 함수를 사용해 진수변환을 할 수 있다. - numObj.toString([radix])radix Optional수의 값을 나타내기 위해 사용되기 위한 기준을 정하는 2와 36사이의 정수. (진수를 나타내는 기수의 값.)=> toString()은 10진수를 특정 진수로 변환하고 싶을 때 사용할 수 있다.let decimalNum = 22;let binaryNum = decimalNum.toString(2);console.log('binaryNum', binaryNum); //binaryNum 10110- parseInt() parseInt() 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수..

공부/JavaScript 2025.01.09