본문 바로가기
알고리즘/알고리즘

알고리즘3

by 놀러와요 2024. 4. 19.
반응형

구현(Implementation)

풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭한다

 

구현 유형의 예시

알고리즘은 간단한데 코드가 지나칠만큼 길어지는 문제

실수 연산을 다루고,특정 소수점 자리까지 출력해야 하는 문제

문자열을 특정한 기준에 따라서 끊어 처리해야 하는 문제

적절한 라이브러리를 찾아서 사용하는 문제

 

완전 탐색 - 모든 경우의 수를 주저 없이 다 계산하는 방법

시뮬레이션 - 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행

 

 

문제 상하좌우

# 상하좌우 문제

n = int(input())
dx = [0,0,-1,1]
dy = [-1,1,0,0]
    #  L R U D
con = ['L', 'R', 'U', 'D']

move = list(input().split())
x = 0
y = 0
for i in move:
    if i in con:
        for j in range(len(con)):
            if i == con[j]:
                xn = x + dx[j]
                yn = y + dy[j]
                if xn < 0 or xn >= n or yn < 0 or yn >= n: continue 
                x = xn
                y = yn


print(x+1,y+1)

L R U D 를 하나씩 입력하면 각 알파벳에 맞게 상,하,좌,우 등으로 움직이는 코드.

 

for 문 로직이 중요.

입력 받은 알파벳을 하나씩 돌며, 상하좌우를 움직임. 이때 x,y에 움직임이 바로 적용되는 것이 아닌 xn,yn 에 한번 옮겨지고, 배열의 크기에 부합하면 옮기는 방법을 택함.

 

 

문제 시각

n = int(input())
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

print(cnt)

모든 시각에 3이 포함되면 카운트 증가.

 

3중 for 문을 돌려 3이 나오는지 확인하면 되는 간단한 문제. 이러한 유형은 완전 탐색(Brute Forcing) 문제 유형이라고 부른다.

 

 

문제 왕실의 나이트

# 왕실의 나이트

input_data = input() # 수 입력

row = int(input_data[1]) # 뒤에 있는 수 입력

# 아스키 코드를 이용해 입력받은 글자를 수로 변환
col = int(ord(input_data[0]) - int(ord('a'))) + 1 

# 8개의 나이트 이동
steps = [(-2,-1), (-1,-2), (1,-2), (2,-1), (2,1), (1,2), (-1,2), (-2,1)]

# 이동할 수 있는 곳 수
result = 0

for step in steps :
    nrow = row + step[0]
    ncol = col + step[1]
    # 1 이하 8 이상은 옮길 수 없게 조건문 설정
    if nrow < 1 or nrow >= 8 or ncol < 1 or ncol >= 8 : continue 
    result += 1
    
print(result) # 갈 수 있는 수 출력

나이트의 이동은 막혀있지 않으면 총 8곳이 가능하다. 나이트의 이동을 steps로 리스트화 한 후, 입력 받은 곳에서부터 시작을 해 for 문을 돈다. 이때 1 이하 8 이상으로 옮길 수 있는 곳이 아닌 곳은 피해가게 조건문을 설정한다. 이외에 정상적인 곳에서는 result를 하나 올린다.

 

 

문제 문자열 재정렬

# 문자열 재정렬

s = input()
copy = ""
s = sorted(s)
num = 0
for i in s:
    if int(ord(i)) < 65 :
        num += int(ord(i)) - int(ord('0'))
    else :
        copy = copy + i

if num != 0:
    copy += str(num)

print(copy)

결과적으로 리스트에 저장된 알파벳을 정렬해 출력해주고, 합계를 뒤에 붙여 출력하면 정답이다.

 

 

출처: https://itlearning.tistory.com/entry/TIL-20210526 [Write Code:티스토리]

반응형

'알고리즘 > 알고리즘' 카테고리의 다른 글

알고리즘4  (0) 2024.04.19
알고리즘2  (0) 2024.04.19
알고리즘1  (0) 2024.04.19
알고리즘 시간 복잡도  (0) 2024.04.19