이런저런 IT 이야기
article thumbnail
Programming Challenges #35
Algorithm 2023. 5. 24. 16:27

문제 : 과거 지구에 외계 문명이 존재했다는 것을 밝혀줄 증거를 찾고 있는 고고학자가 이상한 숫자가 한 줄로 나열되어있는, 부쉬진 벽을 발견했다. 이 숫자들이 왼쪽 부분은 상태가 아주 양호해서 숫자가 잘 보이지만 안타깝게도 오른쪽 부분에 있는 숫자들은 풍화로 인해 잘 안 보이는 것이 많다. 그 고고학자는 잘 보이는 숫자는 모두 2의 거듭제곱이라는 것을 발견하고는 모든 숫자들이 2의 거듭제곱이라는 가설을 세웠다. 그녀는 이 가설을 뒷받침하기 위해 잘 보이는 숫자의 개수가 잘 보이지 않는 숫자의 갯수보다 적은 숫자들을 목록으로 정리했다. 그리고는 당신에게 목록에 있는 것과 같은 첫번째 자리의 숫자를 가지는 가장 작은 2의 거듭제곱을 찾아 달라고 부탁했다. 어떤 정수가 주어졌을때 2^E의 첫째 자리 숫자(맨 ..

article thumbnail
선택 정렬 알고리즘 (Selection Sort Algorithm)
Algorithm 2023. 5. 24. 14:39

선택 정렬(Selection Sort)은 간단하면서도 직관적인 정렬 알고리즘입니다. 배열을 순회하면서 가장 작은 값을 찾아서 해당 위치로 이동시키는 과정을 반복하여 정렬을 수행합니다. 선택 정렬의 동작 방식은 다음과 같습니다: 주어진 배열에서 가장 작은 값(또는 큰 값)을 찾습니다. 그 값을 현재 위치와 교환합니다. 다음 위치로 이동하여 위의 과정을 반복합니다. 배열의 모든 요소가 정렬될 때까지 반복합니다. 선택 정렬은 내부 루프를 통해 현재 위치 이후의 모든 요소를 비교하여 가장 작은 값을 찾습니다. 그 후에 최솟값을 현재 위치와 교환하여 최솟값이 정렬된 위치로 이동합니다. 이러한 과정을 반복하면서 배열이 정렬됩니다. 선택 정렬의 장점은 구현이 간단하고 이해하기 쉽다는 점입니다. 또한, 정렬 중간 단계..

article thumbnail
버블 정렬 알고리즘 (Bubble Sort Algorithm)
Algorithm 2023. 5. 24. 14:25

버블 정렬(Bubble Sort)은 인접한 두 원소를 비교하고 필요에 따라 교환하는 과정을 반복하여 정렬하는 알고리즘입니다. 가장 간단하고 기본적인 정렬 알고리즘 중 하나입니다. 예시1) function bubbleSort(arr) { const n = arr.length; for (let i = 0; i arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } return arr; } // Example usage cons..

article thumbnail
Programming Challenges #34
Algorithm 2023. 5. 24. 14:04

문제 : 일단 어떤수를 받아서 그 수를 뒤집은 다음 뒤집어진 수를 원래의 수에 더하는 과정 뒤집에서 더하기라고 부르자. 그 합이 회문(palindrome, 앞뒤 어느 쪽에서 읽어도 같은 말이 되는 어구. 예) eye, madam, etc….)이 아니면 회문이 될 때가지 이 과정을 반복한다. 예를 들어 처음에 195에서 시작해서 다음과 같이 네 번 뒤집어서 더하기를 반복하면 9,339라는 회문이 만들어진다. 대부분의 정수는 이 방법을 몇 단계만 반복하면 회문이 된다. 하지만 예외도 있다. 회문을 찾을 수 없는 것으로 밝혀진 첫번째 수는 196이다. 하지만 회문이 없다는 것이 증명된적이 없다. 어떤 수가 주어졌을때 회문이 있으면 출력하고, 그 회문을 찾기까지 뒤집어서 더하기를 반복하는 회수를 출력하는 프로그..

article thumbnail
Programming Challenges #33
Algorithm 2023. 5. 24. 13:17

초등학생들이 여러 자리 수의 덧셈을 배울 때는 한 번에 한 자리씩 오른쪽에서 왼쪽으로 계산하도록 배운다. 그런데 그 자리 숫자의 합이 10을 넘어갈 때 그 윗자리 숫자에 1을 더해주는 것을 배울때 많은 학생들이 힘들어 한다. 일련의 덧셈 문제가 주어졌을때 자리를 올리는 횟수를 세어서 선생님들이 학생들을 가르치는데 도움을 줄수 있는 프로그램을 만들어라 입력 각 행에는 열자리 미만의 부호가 없는 정수가 두개씩 입력된다. 마지막 줄에는 '0 0'이 입력된다. 코드 const noCarryTxT = 'No Carry Operation' const CarryTxT = 'Carry Operation' function calculateCarryOperations(input) { let array = input.spl..

article thumbnail
Programming Challenges #32
Algorithm 2023. 5. 24. 10:55

미국 사람들은 축구(football)를 soccer라고 부르긴 하지만 어쨌든 축구는 세계에서 가장 인기 있는 스포츠다. 월드컵 우승을 다섯 번이나 차지한 브라질 같은 나라에는 전국 및 지역 토너먼트가 워낙 많아서 각 토너먼트가 어떻게 돌아가는 있는지 파악하기가 힘들 정도다. 토너먼트 이름, 팀 이름, 경기 수를 받아서 지금까지의 토너먼트 순위를 출력하는 프로그램을 만들어야 한다. 두 팀 중에서 골을 더 많이 넣는 팀이 경기에 이기게 되고 적게 넣은 팀이 경기에 지게 된다. 넣은 골 수가 같으면 비기게 된다. 게임에 이기면 3점, 비기면 1점, 지면 0점의 승점을 얻는다. 팀 순위는 다음과 같은 규칙에 따라 결정된다. 승점 순서대로 결정 이긴 횟수가 많은 팀순으로 결정 골 득실 차(얻은 골 수 - 뺏길 골..

article thumbnail
Big O 표기법을 그래프로 표현
Algorithm 2023. 5. 24. 10:31

우선 그래프를 그리기 위해서 D3.js 라이브러리 파일을 다운로드 받아야 합니다. 아래 링크에서 받으세요 https://d3js.org/ HTML코드입니다. 위 코드의 화면은 아래처럼 보입니다. 그래프는 Big O 표기법으로 알고리즘의 시간 복잡도를 나타내고 있습니다. 각 알고리즘의 수행시간이 입력 크기에 대해 어떻게 증가하는지를 시각적으로 보여주는 것이 목적입니다. 알고리즘1의 경우, 수행시간이 입력 크기 n에 대해 상수 시간으로 일정하게 유지되므로 O(1) 시간 복잡도를 가집니다. 알고리즘2의 경우, 수행시간이 입력 크기 n에 비례하여 선형으로 증가하므로 O(n) 시간 복잡도를 가집니다. 알고리즘3의 경우, 수행시간이 입력 크기 n의 제곱에 비례하여 증가하므로 O(n^2) 시간 복잡도를 가집니다. 따..

article thumbnail
알고리즘의 시간 복잡도를 나타내는 표기 방법
Algorithm 2023. 5. 24. 09:31

Ο(Big O) 표기법 Big O 표기법은 알고리즘의 시간 복잡도를 나타내는 표기 방법 중 하나입니다. 알고리즘의 성능을 평가하고 알고리즘 간의 비교를 위해 사용됩니다. 이를 통해 알고리즘이 입력의 크기에 따라 어떻게 동작하는지 예측할 수 있습니다. Big O 표기법은 대문자 O와 괄호 안에 알고리즘의 실행 시간을 나타내는 함수를 표기합니다. 함수는 입력 크기에 따른 알고리즘의 실행 시간의 증가율을 나타냅니다. 예를 들어, O(1)은 입력 크기에 상관없이 일정한 시간이 소요되는 알고리즘을 나타내며, O(n)은 입력 크기에 비례하여 알고리즘이 선형적으로 증가하는 것을 의미합니다. O(n^2)은 입력 크기의 제곱에 비례하여 알고리즘이 증가하는 것을 나타냅니다. Big O 표기법에서는 주로 최악의 경우를 고려..

article thumbnail
휴리스틱 알고리즘
Algorithm 2023. 5. 23. 22:35

휴리스틱 알고리즘은 최적해를 보장하지는 않지만, 실용적인 시간 내에 근사적인 해를 찾는 방법입니다. 휴리스틱은 문제의 복잡성을 감소시키기 위해 근사적인 결정을 내리는 규칙 또는 알고리즘을 말합니다. 휴리스틱 알고리즘은 다음과 같은 특징을 가지고 있습니다: 근사적인 해: 휴리스틱 알고리즘은 최적해를 보장하지 않습니다. 대신, 문제를 더 작은 부분으로 나누고 근사적인 해를 탐색하여 어떤 기준에 따라 최적해에 가까운 해를 제공합니다. 효율성: 휴리스틱 알고리즘은 실용적인 시간 내에 실행될 수 있습니다. 일반적으로 최적해를 찾는데 필요한 모든 경우의 수를 탐색하는 완전 탐색과 비교하여 상대적으로 효율적입니다. 도메인 지식 활용: 휴리스틱 알고리즘은 문제 도메인의 특성을 이용하여 근사적인 결정을 내립니다. 도메인..

article thumbnail
NP-hard Problems
Algorithm 2023. 5. 23. 22:23

NP-hard 문제는 계산 이론에서 중요한 클래스인 NP (Nondeterministic Polynomial time) 문제의 하위 집합으로, 다항 시간 내에 효율적으로 해결하기 어려운 문제들을 나타냅니다. NP-hard 문제는 다음과 같은 특징을 가지고 있습니다: 어려운 문제: NP-hard 문제는 다항 시간 내에 해결하기 어렵다고 여겨지는 문제입니다. 이는 문제의 크기가 증가함에 따라 계산에 필요한 시간이 지수적으로 증가할 수 있음을 의미합니다. 다항 시간 알고리즘 없음: NP-hard 문제의 특징은, 현재까지 알려진 다항 시간 알고리즘이 없다는 것입니다. 다시 말해, 이러한 문제를 다항 시간 내에 효율적으로 해결하는 알고리즘이 아직 알려지지 않았습니다. 다른 NP 문제들의 어려움을 나타냄: NP-h..

profile on loading

Loading...

검색 태그