CS/알고리즘
[알고리즘] 구현 알고리즘
삶_
2022. 6. 25. 11:12
- 알고리즘은 간단한데 코드가 지나칠만큼 길어지는 문제
- 실수 연산을 다루고, 특정 소수점 자리까지 출력해야하는 문제
- 문자열을 특정한 기준에 따라서 끊어 처리해야하는 문제
- 적절한 라이브러리를 찾아서 사용해야 하는 문제
- 일반적인 알고리즘 문제의
2차원 공간은 행렬의 의미로 사용함
ex. 좌표 어딘가로 이동한다 는 문제 등 - 시뮬레이션/탐색 문제는 2차원 공간에서의 방향 벡터가 자주 활용됨
(특정위치(2,2)에서 이동)- (x, y) 좌표에서, (x는 세로, y는 가로)
#동, 서, 남, 북
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0] - for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
- (x, y) 좌표에서, (x는 세로, y는 가로)
- ex. 상하좌우 문제. 여행가는 NxN 크기의 정사각형 공간에 있다.
- 가장 왼쪽위 좌표는 (1,1). 가장 오른쪽 아래 좌표는(n,n).
상,하,좌,우 방향으로 이동할수있고, 시작좌표는 (1,1).
L,R,U,D로 이동
L : 왼쪽으로 한칸이동 >> 서
R : 오른쪽으로 한칸이동 >> 동
U : 위로 한칸이동 >> 북
D : 아래로 한칸이동 >> 남 - 첫째줄에 공간의 크기
둘째줄에 여행가의 계획서 제출
여행가가 최종적으로 도착할 지점의 좌표를 공백을 기준으로 출력한다
import sys
n = int(sys.stdin.readline())
l = list(sys.stdin.readline().split())
x, y = 1, 1 #초기좌표
# 방향마다 더할 변수를 넣기
dx = [0,0,-1,1]
dy = [-1,1,0,0]
move_type = ['L','R','U','D'] #방향 명시 (dx,dy 순서에 맞게)
#l안의 요소를 넣어주는 식
for i in l:
#비교해서 연산하기
for t in range(len(move_type)):
if i == move_type[t]:
#nx, ny 초기화를 제외해도 이렇게 쓸수있음
nx = x + dx[t]
ny = y + dy[t]
#공간을 벗어나면 무시. 연산조차 안함
if nx < 1 or nx > n or ny < 1 or ny > n:
continue;
x, y = nx, ny
print(x,y)
- 00:00:00부터 n시 59분 59초까지 모든 시각중에서
3이 하나라도 포함되는 모든 경우의 수
첫째줄에 정수 n
import sys
h = int(sys.stdin.readline())
cnt = 0
#n시간안 -> 60분안 -> 60초안 -> 문자열 다 더했을때 3이 있는 경우만 카운트+
for i in range(h+1):
for m in range(60):
for s in range(60):
if '3' in str(i) + str(m) + str(s):
cnt += 1
print(cnt)
- 8x8 평면이 있다
좌표는 행은 1~8 열은 a~h
그중 한칸에 나이트가 서있음
나이트는 두가지 경우로 이동가능
1. 수평으로 두칸 이동 + 수직으로 한칸이동
2. 수직으로 두칸 이동 + 수평으로 한칸이동
열과행이 순서대로 공백없이 입력된다
나이트가 이동할수있는 경우의 수 출력
import sys
#나이트 위치 입력받기
data = sys.stdin.readline()
y = ord(data[0])-ord('a')+1
x = int(data[1])
#나이트가 이동할 수 있는 8가지 방향
steps = [(-2,-1),(-1,-2),(-2,1),(1,-2),(2,-1),(-1, 2),(2, 1),(1, 2)]
result = 0
# x와 y가 8초과, 1미만이 되지않아야 그곳으로 이동 가능한 것!
for step in steps:
new_x = x+step[0]
new_y = y+step[1]
if new_x >=1 and new_x <=8 and new_y >= 1 and new_y <= 8:
result +=1
print(result)
- 알파벳 대문자 A~Z와 숫자 0~9 로만 구성된 문자열이 입력된다.
모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에,
그 뒤에 모든 숫자들을 더한값을 이어 출력한다
#내가 푼 풀이
import sys
n = sys.stdin.readline().rstrip()
al = []
mt = 0
#나는 리스트에 넣고, 정렬, 출력을 다 따로했다
for i in range(len(n)):
if 'A'<= n[i] <= 'Z':
al += list(n[i])
else:
mt += int(n[i])
al.sort()
print(''.join(a for a in al)+str(mt))
#학습 코드
import sys
n = sys.stdin.readline().rstrip()
al = []
mt = 0
for i in n:
if i.isalpha():
al.append(i)
else:
mt += int(i)
al.sort()
print(''.join(al)+str(mt))