본문 바로가기

CS/Algorithm

(23)
삽입, 선택, 버블 정렬 삽입 정렬(Insertion Sort) - 가장 간단한 정렬 방식으로 이미 순서화된 파일에 새로운 하나의 레코드를 순서에 맞게 삽입시켜 정렬한다. - 두 번째 키와 첫 번째 키를 비교해 순서대로 나열하고 이어서 세번째 앞의 n-1개의 키와 비교하여 알맞은 순서에 삽입하여 정렬하는 방식이다. - 평균과 최악 모두 수행 시간 복잡도는 O(n²)이다. 데이터 : 8 5 6 2 4 1회차 : 5 8 6 2 4 2회차 : 5 6 8 2 4 3회차 : 2 5 6 8 4 4회차 : 2 4 5 6 8 public class SortExample { public static void main(String [] args) { String strQuestion = "85624"; System.out.println("결과 :..
탐색 알고리즘 (DFS) DFS(Depth-First Search) DFS는 깊이 우선 탐색이라고 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 쉽게 말해서 경로를 탐색하다가 특정한 상황에서 최대한 깊숙이 들어가서 노드를 방문한 후, 다시 돌아가 다른 경로로 탐색하는 알고리즘이다. DFS는 스택 자료 구조를 이용하며 구체적인 동작 과정은 다음과 같다. 1. 탐색 시작 노드를 스택에 삽입하고 방문처리를 한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.
왕실의 나이트 문제 행복왕국의 왕실정원은 체스판과 같은 8 * 8좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고 있기 때문에 이동을 할때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위취에서 다음과 같은 2가지 경우로 이동할 수 있다. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 수직으로 두칸 이동한 뒤에 수평으로 한 칸 이동하기 이처럼 8 * 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오. 이떄 왕실의 정원에서 행 위치를 표현할 떄는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h까지 로 표현한다. 예를 ..
파이썬 실수형 변수가 정수형인지 실수형인지 확인 1. 문제 요약 임의의 정수 n에 대해, n이 어떤 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. import math def isInteger(strFloat): try: res = int(strFloat) return True except: return False number = 121 fRes = math.sqrt(number) answer = 0 strRes = str(fRes) if isInteger(fRes): iRes = int(fRes) answer = (iRes + 1) * (iRes + 1) else : answer = -1 print(answer)
휴대폰 다이얼 오랜만에 알고리즘 공부좀 하려고 프로그래머스에 들어갔다가 레벨 체크하는 기능이 있길래 풀어봤다. 문제는 총 2문제, 시간제한은 40분이다. 레벨 테스트 1이라 만만하게 봤는데 두 번째 문제가 생각보다 까다로워서 포스팅 하려고 한다. 문제 내용 이 전화 키패드에서 왼손과 오른손의 엄지손가락만을 이용해서 숫자만을 입력하려고 합니다. 맨 처음 왼손 엄지손가락은 * 키패드에 오른손 엄지손가락은 # 키패드 위치에서 시작하며, 엄지손가락을 사용하는 규칙은 다음과 같습니다. 엄지손가락은 상하좌우 4가지 방향으로만 이동할 수 있으며 키패드 이동 한 칸은 거리로 1에 해당합니다. 왼쪽 열의 3개의 숫자 1, 4, 7을 입력할 때는 왼손 엄지손가락을 사용합니다. 오른쪽 열의 3개의 숫자 3, 6, 9를 입력할 때는 오른손..
자료구조 힙 보호되어 있는 글입니다.
복잡도 복잡도 : 알고리즘의 성능을 나타내는 척도 1. 시간 복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 오래 걸리는지를 확인. 시간이 오래 걸리지 않을 때 더 좋은 코드라고 얘기할 수 있다. 2. 공간 복잡도 : 특정한 크기의 입력에 대하여 알고리즘이 얼마나 많은 메모리를 차지하는지를 의마한다. 일반적으로 복잡도가 낮은 알고리즘을 좋은 알고리즘이라 한다.