Algorithm/Problem Solving

[하나라도 제대로] 구현(1)

Jinlib 2022. 1. 9. 00:09

서론

구현(Implementation) 문제는 머릿속에 있는 알고리즘을 소스코드로 바꾸는 문제를 일컫는말로 주로 시뮬레이션완전 탐색에 초점을 맞춘 문제유형이다. 일반적으로는 머릿속으로 떠올리는 것을 쉽지만 소스코드로 옮기기 어려운 문제를 지칭한다.
때로는 적정한 라이브러리의 능수능란한사용법을 요하는 문제도 존재한다.
ex) 모든 순열, 모든 조합을 찾을때 python라이브러리를 활용하면 매우 간결하게 작성할 수 있다.

  • 일반적으로 알고리즘 문제에서 2차원 공간은 행렬(Matrix)의 의미로 사용된다.
    위처럼 행렬을 이용해서 문제를 푸는일이 많다.
  • 시뮬레이션 및 완전탐색 문제에서는 2차원 공간에서의 방향벡터를 자주 활용합니다
    

연습문제

코드

def checkTF(N):
    if N % 10 == 3 or N / 10 == 3:
        return True
    return False

def trackingThree(N):
    hour = 0
    min = 0
    sec = 0
    result = 0
    for i in range(N*60*60+3599):
        sec += 1
        if sec == 60:
            min += 1
            sec = 0
        if min == 60:
            hour += 1
            min = 0
        if checkTF(sec) or checkTF(min) or checkTF(hour):
            result += 1
    return result
print(trackingThree(5))

배운점: 31 / 10 => 3.1이 나온다. 내가 원한건 몫이 나와야해서 3이 나와야했는데. 이런 경우에는 '//'을 사용하여야한다.

모범코드

def trackingThree_dongbinna(N):
    cnt = 0
    for i in range(N+1):
        for j in range(60):
            for k in range(60):
                if '3' in str(i)+str(j)+str(k):
                    cnt+=1
    return(cnt)
print(trackingThree_dongbinna(5))

배운점:

  1. 시간은 60초 단위로 값이 바뀌는것이다(ex 60초->1분) 이는 N 중 포문의 형태와 동일한 형태를 띄므로 3중 포문을 통해 시,분,초를 계산하자.
  2. 3이 포함되는 항목을 찾는것이니, 우선 str를 사용해서 문자열을 합친다.
  3. 문자열안에 3이 있는지 아닌지 in을 이용하여 확인한다.