전체 글
개인 기록용 웹 사이트
-
로또 추첨기 풀이 6개의 무작위 공과 1개의 보너스 공을 뽑아주는 프로그램을 작성하시오. 개인 풀이 다이어그램 알고리즘 // 무작위 숫자 7개 뽑기 const allNumbers = Array(45) .fill() .map((el, i) => i + 1); const randomNumbers = []; for (let _ = 0; _ < 7; _++) { const index = Math.floor(Math.random() * allNumbers.length); // 0 ~ 8 randomNumbers.push(allNumbers[index]); allNumbers.splice(index, 1); } const ballNumbers = randomNumbers.slice(0, 6).sort((a, b) ..
[JavaScript] 로또 추첨기 풀이로또 추첨기 풀이 6개의 무작위 공과 1개의 보너스 공을 뽑아주는 프로그램을 작성하시오. 개인 풀이 다이어그램 알고리즘 // 무작위 숫자 7개 뽑기 const allNumbers = Array(45) .fill() .map((el, i) => i + 1); const randomNumbers = []; for (let _ = 0; _ < 7; _++) { const index = Math.floor(Math.random() * allNumbers.length); // 0 ~ 8 randomNumbers.push(allNumbers[index]); allNumbers.splice(index, 1); } const ballNumbers = randomNumbers.slice(0, 6).sort((a, b) ..
2022.02.05 -
숫자야구 4자리 정답 숫자를 찾는 문제. 입력값 4자리 수 중 숫자가 포함되어 있는 경우 볼, 자리까지 동일하면 스트라이크. 모두 맞추면 홈런. 개인 풀이 다이어그램 알고리즘 // 랜덤 정수 4자리 정답값 부여 const randomNumberInRange = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; let answer = ""; while (answer.length !== 4) { let random = String(randomNumberInRange(1, 9)); if (answer.indexOf(random) == -1) { answer += random; } } // 정답값 표시 ( 실제 플레이 시 이 부분은 주석처리 ) ..
[JavaScript] 숫자야구 풀이숫자야구 4자리 정답 숫자를 찾는 문제. 입력값 4자리 수 중 숫자가 포함되어 있는 경우 볼, 자리까지 동일하면 스트라이크. 모두 맞추면 홈런. 개인 풀이 다이어그램 알고리즘 // 랜덤 정수 4자리 정답값 부여 const randomNumberInRange = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; let answer = ""; while (answer.length !== 4) { let random = String(randomNumberInRange(1, 9)); if (answer.indexOf(random) == -1) { answer += random; } } // 정답값 표시 ( 실제 플레이 시 이 부분은 주석처리 ) ..
2022.02.04 -
최단 경로 알고리즘 문제 최단 경로 알고리즘 다익스트라 최단 경로 알고리즘 원론적 구현 import sys input = sys.stdin.readline() INF = int(1e9) # 무한을 의미하는 값으로 10억 설정 # 노드의 개수, 간선의 개수 입력 n, m = map(int, input().split()) # 시작 노드 번호를 입력받기 start = int(input()) # 각 노드에 연결되어 있는 노드에 대한 정보를 담는 리스트를 만들기 graph = [[] for _ in range(n + 1)] # 방문한 적이 있는지 체크하는 목적의 리스트 생성 visited = [False] * (n + 1) # 최단 거리 테이블을 모두 무한으로 초기화 distance = [INF] * (n + 1..
[이코테 Python] 최단 경로 알고리즘최단 경로 알고리즘 문제 최단 경로 알고리즘 다익스트라 최단 경로 알고리즘 원론적 구현 import sys input = sys.stdin.readline() INF = int(1e9) # 무한을 의미하는 값으로 10억 설정 # 노드의 개수, 간선의 개수 입력 n, m = map(int, input().split()) # 시작 노드 번호를 입력받기 start = int(input()) # 각 노드에 연결되어 있는 노드에 대한 정보를 담는 리스트를 만들기 graph = [[] for _ in range(n + 1)] # 방문한 적이 있는지 체크하는 목적의 리스트 생성 visited = [False] * (n + 1) # 최단 거리 테이블을 모두 무한으로 초기화 distance = [INF] * (n + 1..
2022.01.19 -
다이나믹 프로그래밍 문제 다이나믹 프로그래밍 조건 최적 부분 구조 : 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 중복되는 부분 문제 : 동일한 작은 문제를 반복적으로 해결해야 한다 전형적으로 보텀업(상향식) 방식을 사용 피보나치 수 단순 재귀형 O(2^n) def fibonacci(x): if x == 1 or x == 2: return 1 else: return fibonacci(x - 1) + fibonacci(x - 2) print(fibonacci(30)) DP 탑다운 O(n) # 한 번 계산된 결과를 메모이제이션하기 위한 리스트 초기화 n = int(input()) d = [0] * (n + 1) # 피보나치 함수를 재귀함수로 구현 (탑다운 형식..
[이코테 Python] 다이나믹 프로그래밍 문제다이나믹 프로그래밍 문제 다이나믹 프로그래밍 조건 최적 부분 구조 : 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 중복되는 부분 문제 : 동일한 작은 문제를 반복적으로 해결해야 한다 전형적으로 보텀업(상향식) 방식을 사용 피보나치 수 단순 재귀형 O(2^n) def fibonacci(x): if x == 1 or x == 2: return 1 else: return fibonacci(x - 1) + fibonacci(x - 2) print(fibonacci(30)) DP 탑다운 O(n) # 한 번 계산된 결과를 메모이제이션하기 위한 리스트 초기화 n = int(input()) d = [0] * (n + 1) # 피보나치 함수를 재귀함수로 구현 (탑다운 형식..
2022.01.19 -
이진 탐색 알고리즘 문제 이진 탐색 알고리즘 def binary_search_recursive(arr, target, stt, end): if stt > end: return None mid = (stt + end) // 2 if arr[mid] == target: return mid elif arr[mid] > target: return binary_search_recursive(arr, target, stt, mid - 1) else: return binary_search_recursive(arr, target, mid + 1, end) def binary_search_loop(arr, target, stt, end): while stt target: end = mid - 1 else: stt = m..
[이코테 Python] 이진 탐색 알고리즘 문제이진 탐색 알고리즘 문제 이진 탐색 알고리즘 def binary_search_recursive(arr, target, stt, end): if stt > end: return None mid = (stt + end) // 2 if arr[mid] == target: return mid elif arr[mid] > target: return binary_search_recursive(arr, target, stt, mid - 1) else: return binary_search_recursive(arr, target, mid + 1, end) def binary_search_loop(arr, target, stt, end): while stt target: end = mid - 1 else: stt = m..
2022.01.13 -
정렬 알고리즘 문제 정렬 알고리즘 선택 정렬 # 선택 정렬 arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(arr)): min_index = i for j in range(i + 1, len(arr)): if arr[min_index] > arr[j]: min_index = j arr[i], arr[min_index] = arr[min_index], arr[i] print("선택 정렬 :", arr) 삽입 정렬 # 삽입 정렬 arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(1, len(arr)): # i-1까지는 정렬되어 있다고 가정 for j in range(i, 0, -1): if arr[j] < arr[..
[이코테 Python] 정렬 알고리즘 문제정렬 알고리즘 문제 정렬 알고리즘 선택 정렬 # 선택 정렬 arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(len(arr)): min_index = i for j in range(i + 1, len(arr)): if arr[min_index] > arr[j]: min_index = j arr[i], arr[min_index] = arr[min_index], arr[i] print("선택 정렬 :", arr) 삽입 정렬 # 삽입 정렬 arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8] for i in range(1, len(arr)): # i-1까지는 정렬되어 있다고 가정 for j in range(i, 0, -1): if arr[j] < arr[..
2022.01.13 -
DFS / BFS 탐색 알고리즘 문제 깊이 우선탐색 graph = [[0], [2, 3, 8], [1, 7], [1, 4, 5], [3, 5], [3, 4], [7], [2, 6, 8], [1, 7]] visited = [False] * 9 def dfs(v, graph, visited): visited[v] = True print(v, end=" ") for node in graph[v]: if not visited[node]: dfs(node, graph, visited) dfs(1, graph, visited) 너비 우선탐색 from collections import deque visited = [False] * 9 graph = [[0], [2, 3, 8], [1, 7], [1, 4, 5], [3..
[이코테 Python] DFS / BFS 탐색 알고리즘 문제DFS / BFS 탐색 알고리즘 문제 깊이 우선탐색 graph = [[0], [2, 3, 8], [1, 7], [1, 4, 5], [3, 5], [3, 4], [7], [2, 6, 8], [1, 7]] visited = [False] * 9 def dfs(v, graph, visited): visited[v] = True print(v, end=" ") for node in graph[v]: if not visited[node]: dfs(node, graph, visited) dfs(1, graph, visited) 너비 우선탐색 from collections import deque visited = [False] * 9 graph = [[0], [2, 3, 8], [1, 7], [1, 4, 5], [3..
2022.01.13 -
구현 문제 상하좌우 [문제] 여행가 A는 N × N 크기의 정사각형 공간 위에 서 있습니다. 이 공간은 1 × 1 크기의 정사각형으로 나누어져 있습니다. 가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당합니다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)입니다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있습니다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로 L, R, U, D 중 하나의 문자가 반복적으로 적혀있습니다. 각 문자의 의미는 다음과 같습니다 L: 왼쪽으로 한 칸 이동 R: 오른쪽으로 한 칸 이동 U: 위로 한 칸 이동 D: 아래로 한 칸 이동 이때 여행가 A가 N × N 크기의 정사각형 공간을 벗어..
[이코테 Python] 구현 문제구현 문제 상하좌우 [문제] 여행가 A는 N × N 크기의 정사각형 공간 위에 서 있습니다. 이 공간은 1 × 1 크기의 정사각형으로 나누어져 있습니다. 가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당합니다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)입니다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있습니다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로 L, R, U, D 중 하나의 문자가 반복적으로 적혀있습니다. 각 문자의 의미는 다음과 같습니다 L: 왼쪽으로 한 칸 이동 R: 오른쪽으로 한 칸 이동 U: 위로 한 칸 이동 D: 아래로 한 칸 이동 이때 여행가 A가 N × N 크기의 정사각형 공간을 벗어..
2022.01.13 -
그리디 알고리즘 문제 거스름 돈 [문제] 당신은 음식점의 계산을 도와주는 점원입니다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한이 존재한다고 가정합니다. 손님에게 거슬러 주어야 할 돈이 N원일 때 거슬러 주어야 할 동전의 최소 개수를 구하세요. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수입니다. [입력] 1260 [출력] 6 정답 n = int(input()) coins = [500, 100, 50, 10] cnt = 0 for coin in coins: cnt += n // coin n %= coin print(cnt) 큰 수의 법칙 동빈이의 큰수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰수를 만드는 방법이다. 단, 배..
[이코테 Python] 그리디 알고리즘 문제그리디 알고리즘 문제 거스름 돈 [문제] 당신은 음식점의 계산을 도와주는 점원입니다. 카운터에는 거스름돈으로 사용할 500원, 100원, 50원, 10원짜리 동전이 무한이 존재한다고 가정합니다. 손님에게 거슬러 주어야 할 돈이 N원일 때 거슬러 주어야 할 동전의 최소 개수를 구하세요. 단, 거슬러 줘야 할 돈 N은 항상 10의 배수입니다. [입력] 1260 [출력] 6 정답 n = int(input()) coins = [500, 100, 50, 10] cnt = 0 for coin in coins: cnt += n // coin n %= coin print(cnt) 큰 수의 법칙 동빈이의 큰수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰수를 만드는 방법이다. 단, 배..
2022.01.13 -
이 글은 Windows 10, Terminal (Ubuntu 18.04) 의 bash shell에서 적용한 내용입니다. (1) 서버 최신상태 확인 다음과 같이 서버 패키지와 리포지토리를 최신 상태로 업데이트합니다. sudo apt update sudo apt -y upgrade (2) 자바 설치 Java가 설치되어있는지 먼저 확인합니다. $ java -version # Command 'java' not found, but can be installed with: 주석과 같이 java 명령어가 적용되지 않는다면 설치되어있지 않은 것입니다. 현재 시점을 기준으로 java(jdk)의 최신 버전은 java-17, 즉 Java SE Development Kit 17.0.1입니다. 컴파일 하려는 자바 파일과 버전을..
[Java] WSL 우분투(Ubuntu)에 Java(jdk) 설치 및 Java 파일 컴파일 하기이 글은 Windows 10, Terminal (Ubuntu 18.04) 의 bash shell에서 적용한 내용입니다. (1) 서버 최신상태 확인 다음과 같이 서버 패키지와 리포지토리를 최신 상태로 업데이트합니다. sudo apt update sudo apt -y upgrade (2) 자바 설치 Java가 설치되어있는지 먼저 확인합니다. $ java -version # Command 'java' not found, but can be installed with: 주석과 같이 java 명령어가 적용되지 않는다면 설치되어있지 않은 것입니다. 현재 시점을 기준으로 java(jdk)의 최신 버전은 java-17, 즉 Java SE Development Kit 17.0.1입니다. 컴파일 하려는 자바 파일과 버전을..
2022.01.07 -
레지스터와 카운터 레지스터 - 플립플롭의 집합체. - 2진 정보 저장이 가능한 셀들의 집합. - 플립플롭에 덧붙여 어떤 연산을 수행하는 조합회로를 포함할 수 있음. - 플립플롭과 그들의 상태전이에 영향을 주는 회로의 집합으로 구성 카운터 - 입력펄스가 가해짐에 따라 미리 정해진 순서대로 상태를 전이하는 레지스터 - 레지스터의 특수한 형태라고도 볼 수 있음. 레지스터 D-플립플롭들과 하나의 공통된 클럭 펄스 입력으로 구성된 레지스터 Clock=1 입력 정보 저장(상승 전이) Clock=0 변화없음 Clear=0 비동기적으로 모든 레지스터를 0으로 모두 클리어 병렬로드를 갖는 레지스터 병렬 로드 : 레지스터의 모든 비트가 하나의 클럭 펄스에서 동시에 로드됨. Clock=1 입력 정보 로딩(상승 전이) Clo..
[디지털 시스템 회로 설계] 레지스터와 카운터레지스터와 카운터 레지스터 - 플립플롭의 집합체. - 2진 정보 저장이 가능한 셀들의 집합. - 플립플롭에 덧붙여 어떤 연산을 수행하는 조합회로를 포함할 수 있음. - 플립플롭과 그들의 상태전이에 영향을 주는 회로의 집합으로 구성 카운터 - 입력펄스가 가해짐에 따라 미리 정해진 순서대로 상태를 전이하는 레지스터 - 레지스터의 특수한 형태라고도 볼 수 있음. 레지스터 D-플립플롭들과 하나의 공통된 클럭 펄스 입력으로 구성된 레지스터 Clock=1 입력 정보 저장(상승 전이) Clock=0 변화없음 Clear=0 비동기적으로 모든 레지스터를 0으로 모두 클리어 병렬로드를 갖는 레지스터 병렬 로드 : 레지스터의 모든 비트가 하나의 클럭 펄스에서 동시에 로드됨. Clock=1 입력 정보 로딩(상승 전이) Clo..
2021.12.19 -
모듈화와 인터페이스 소프트웨어 설계 - 소프트웨어 해결책을 위한 문제 해결과 계획 과정 - 요구사항에 대한 구현 방법을 명시하는 것 소프트웨어 설계 원칙 추상화 (Abstraction) - 복잡한 세부사항을 배제하고 본질적인 부분만 추출함 - 종류 : 기능 추상화, 자료 추상화, 제어 추상화 모듈화 (Modularization) 정제 (Refinement) - 하향식 방법으로 프로그램 구조를 단순 기능으로 혹은 상세 설명으로 구체화 구조화 (Structured) - 구성 요소와 그들간의 상호작용방식 정의 - 종류 : 계층구조 (단계적 분해, 분할 정복),네트워크 구조, 관계형 구조, ER 구조 등 정보은닉 (Information Hiding) - 모듈 내부의 정보와 구현을 숨기고, 인터페이스로만 접근 가..
[디지털 시스템 회로 설계] 모듈화와 인터페이스모듈화와 인터페이스 소프트웨어 설계 - 소프트웨어 해결책을 위한 문제 해결과 계획 과정 - 요구사항에 대한 구현 방법을 명시하는 것 소프트웨어 설계 원칙 추상화 (Abstraction) - 복잡한 세부사항을 배제하고 본질적인 부분만 추출함 - 종류 : 기능 추상화, 자료 추상화, 제어 추상화 모듈화 (Modularization) 정제 (Refinement) - 하향식 방법으로 프로그램 구조를 단순 기능으로 혹은 상세 설명으로 구체화 구조화 (Structured) - 구성 요소와 그들간의 상호작용방식 정의 - 종류 : 계층구조 (단계적 분해, 분할 정복),네트워크 구조, 관계형 구조, ER 구조 등 정보은닉 (Information Hiding) - 모듈 내부의 정보와 구현을 숨기고, 인터페이스로만 접근 가..
2021.12.18