1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 럭키 스트레이트
s = 123402
data = str(s)
m = int(len(data) // 2)
sum_left = 0
sum_right = 0
for i in range(0,m):
sum_left+= int(data[i])
for i in range(m,len(data)):
sum_right += int(data[i])
print(sum_left)
print(sum_right)
if sum_left == sum_right :
print('LUCKY')
else:
print('READY')
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 문자열 재정렬
st = 'K1KA5CB7'
s = []
num = 0
for x in st:
if x.isalpha():
s.append(x)
else:
num += int(x)
s.sort()
if num != 0:
s.append(str(num))
print("".join(s))
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 문자열 압축
def solution(s):
answer = len(s)
# 1개 단위(step)부터 압축 단위를 늘려가며 확인
for step in range(1,len(s)//2 +1):
compressed =""
prev = s[0:step] # 앞에서부터 step만큼의 문자열 추출
count = 1
# 단위(step) 크기만큼 증가시키며 이전 문자열과 비교
for j in range(step, len(s), step):
# 이전 상태와 동일하다면 압축 횟수(count) 증가
if prev == s[j:j +step]:
count +=1
# 다른 문자열이 나왔다면(더 이상 압축하지 못하는 경우라면)
else:
compressed +=str(count)+prev if count >= 2 else prev
prev = s[j:j + step] # 다시 상태 초기화
count = 1
# 남아 있는 문자열에 대해서 처리
compressed += str(count) + prev if count >= 2 else prev
# 만들어지는 압축 문자열이 가장 짧은 것이 정답
answer = min(answer, len(compressed))
return answer
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
def solution(key, lock):
answer = True
n = len(lock)
m = len(key)
# 자물쇠의 크기를 기존의 3배로 변환
new_lock = [[0] * (n*3) for _ in range(n * 3)]
# 새로운 자물쇠의 중앙 부분에 기존의 자물쇠 넣기
for i in range(n):
for j in range(n):
new_lock[i+n][j+n] = lock[i][j]
# 4가지 방향에서 대해서 확인
for rotation in range(4):
key = rotate_a_matrix_by_90degree(key) # 열쇠 회전
for x in range(n * 2) :
for y in range(n * 2) :
# 자물쇠에 열쇠를 끼워 넣기
for i in range(m):
for j in range(m):
new_lock[x + i][y +j] += key[i][j]
# 새로운 자물쇠에ㅐ 열쇠가 정확히 들어 맞는지 검사
if check(new_lock) == True:
answer = true
# 자물쇠에 열쇠를 다시 빼기
for i in range(m):
for j in range(m):
new_lock[x+1][y+j]-= key[i][j]
return answer
# 2차원 리스트 90도 회전
def rotate_a_matrix_by_90degree(a):
n = len(a) # 행 길이 계산
m = len(a[0]) # 열 길이 계산
result = [[0] * n for _ in range(m)] # 결과 리스트
for i in range(n):
for j in range(m):
result[j][n-i-1] = a[i][j]
return result
# 자물쇠의 중간 부분이 모두 1인지 확인
def check(new_lock):
lock_length = len(new_lock) // 3
for i in range(lock_length, lock_length * 2):
for j in range(lock_length, lock_length * 2):
if new_lock[i][j] != 1:
return False
return True
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# 뱀
n = int(input())
k = int(input())
data = [[0] * (n + 1) for _ in range(n + 1)] # 맵 정보
info = [] # 방향 회전 정보
# 맵 정보(사과 있는 곳은 1로 표시)
for _ in range(k):
a, b = map(int, input().split())
data[a][b] = 1
# 방향 회전 정보 입력
l = int(input())
for _ in range(l):
x, c = input().split()
info.append((int(x), c))
# 처음에는 오른쪽을 보고 있으므로(동, 남, 서, 북)
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def turn(direction, c):
if c == "L":
direction = (direction - 1) % 4
else:
direction = (direction + 1) % 4
return direction
def simulate():
x, y = 1, 1 # 뱀의 머리 위치
data[x][y] = 2 # 뱀이 존재하는 위치는 2로 표시
direction = 0 # 처음에는 동쪽을 보고 있음
time = 0 # 시작한 뒤에 지난 '초' 시간
index = 0 # 다음에 회전할 정보
q = [(x, y)] # 뱀이 차지하고 있는 위치 정보(꼬리가 앞쪽)
while True:
nx = x + dx[direction]
ny = y + dy[direction]
# 맵 범위 안에 있고, 뱀의 몸통이 없는 위치라면
if 1 <= nx and nx <= n and 1 <= ny and ny <= n and data[nx][ny] != 2:
# 사과가 없다면 이동 후에 꼬리 제거
if data[nx][ny] == 0:
data[nx][ny] = 2
q.append((nx, ny))
px, py = q.pop(0)
data[px][py] = 0
# 사과가 있다면 이동 후에 꼬리 그대로 두기
if data[nx][ny] == 1:
data[nx][ny] = 2
q.append((nx, ny))
# 벽이나 뱀의 몸통과 부딪혔다면
else:
time += 1
break
x, y = nx, ny # 다음 위치로 머리를 이동
time += 1
if index < l and time == info[index][0]: # 회전할 시간인 경우 회전
direction = turn(direction, info[index][1])
index += 1
return time
print(simulate())
|
cs |
'알고리즘 문제 > 자료구조&알고리즘' 카테고리의 다른 글
DFS/BFS 문제 (0) | 2020.10.25 |
---|---|
그리디 기출 (0) | 2020.10.24 |
기타알고리즘(리스트) (0) | 2020.10.24 |
기타 알고리즘(소수) (0) | 2020.10.24 |
그래프 이론 (0) | 2020.10.24 |