땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • ㅗ
  • D
  • E
  • 이것이 리눅스다 with Rocky Linux9
  • I

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Coding Test(Algorithm) - Python
Algorithm/concept

Coding Test(Algorithm) - Python

2021. 11. 2. 17:25

문제 해결 과정

1. 지문 읽기 및 컴퓨터적 사고

2. 요구사항(복잡도) 분석

3. 문제 해결을 위한 아이디어 찾기

4. 소스코드 설계 및 코딩

시간 복잡도

O(n^2) => O(xlogx) => O(x) => O(logx)

 

<시간제한 1초>

N의 범위 500 : O(N^3)

N의 범위 2,000: O(N^2)

N의 범위 100,000 : O(NlogN)

N의 범위 10,000,000 : O(N)

 

수행 시간 측정 

import time
start_time = time.time() # 측정 시작

# 프로그램 소스코드
end_time = time.time() # 측정 종료
print("time:", end_time - start_time) # 수행 시간 출력

지수 표현 방식

#1,000,000,000 지수 표현 방식
a = 1e9 

#752.5
a = 75.25e1

#3.954
a = 3954e-3

소수 구하기

#2 ~ (x-1) 사이의 값이 x와 나누어 떨어지면 안된다는 소수의 특성을 이용하여 구할 수 있음

for i in range(2,a):
    if(a%i==0):
      return False
#에라토스테네스의 체 이용 O(NloglogN)

def isprime(m, n):
  n += 1                            # for문 사용을 위한 n += 1
  prime = [True] * n                # n개의 [True]가 있는 리스트 생성
  for i in range(2, int(n**0.5)+1): # n의 제곱근까지만 검사
    if prime[i]:                    # prime[i]가 True일때
      for j in range(2*i, n, i):    # prime 내 i의 배수들을 False로 변환
        prime[j] = False

  for i in range(m, n):
    if i > 1 and prime[i] == True:  # 1 이상이면서 남은 소수들을 출력
      print(i)

약수 구하기

for a in range(1, n+1 ): #O(n^2)
    if n % a == 0:
        print(a)
n = 10
for i in range(1, n//2 + 1): #O(n^3/2)
    if n % i == 0:
        print(i, end=" ")
print(n)
n = 20
for i in range(1, int(n**0.5)):
    if n % i == 0:
        print(i, end=" ")
        print(n//i, end=" ")
i += 1
if i**2 == n:
    print(i)

하노이의 탑

data = []
def hanoi(N, start, to, via):
    if N == 1:
        data.append([start,to])
    else:
        hanoi(N-1, start, via, to)
        data.append([start,to])
        hanoi(N-1, via, to, start)

n = int(input())
hanoi(n, '1', '3', '2')

print(len(data))
for i in data:
    print(' '.join(i))

백트래킹(Backtracking)

길을 가다가 이 길이 아닌 것 같으면 왔던 길로 되돌아가 다른 경로로 진행

즉, 코딩에서는 반복문의 횟수까지 줄일 수 있으므로 효율적

보통 재귀로 구현하며 조건이 맞지 않으면 종료한다.

DFS(깊이 우선 탐색) 기반

 

'Algorithm > concept' 카테고리의 다른 글

Coding Test(다이나믹 프로그래밍)  (0) 2021.12.16
Coding Test(이진 탐색)  (0) 2021.12.16
Coding Test(DFS/BFS)  (0) 2021.12.15
Coding Test(그리디 & 구현)  (0) 2021.12.14
Coding Test(Grammar) - Python  (0) 2021.11.02
    'Algorithm/concept' 카테고리의 다른 글
    • Coding Test(이진 탐색)
    • Coding Test(DFS/BFS)
    • Coding Test(그리디 & 구현)
    • Coding Test(Grammar) - Python
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바