s = ["csdf", "bbb", "cccc"]
n = 1
dic = {}
idx = []
for i in s:
dic[i[n]] = i
print(dic.keys())
sorted_key = sorted(dic.keys())
new_dic = {}
for i in sorted_key:
new_dic[i] = dic[i]
print(new_dic.values())
정답
키를 뽑은 인덱스와 원래값을 함께 담은 리스트생성
인덱스 순으로 정렬하고, 인덱스가 동일하다면 원래 문자열값과 비교
def solution(strings, n):
answer = []
num = []
#정렬 인덱스를 뽑은 리스트 만들기
for i in strings:
num.append([i[n], i])
num.sort(key = lambda m : (m[0], m[1]))
for i in num:
answer.append(i[1])
return answer
def solution(s):
dictionary = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5",
"six":"6", "seven":"7", "eight":"8", "nine":"9"}
for key, value in dictionary.items():
s = s.replace(key, value)
return int(s)
정답 (replace 사용 안한 버전)
isdigit() : 문자열이 숫자인지 확인하는 함수
def solution(s):
dictionary = {"zero":"0", "one":"1", "two":"2", "three":"3", "four":"4", "five":"5",
"six":"6", "seven":"7", "eight":"8", "nine":"9"}
temp = ""
ans = ""
for i in s:
if i.isdigit():
ans += i
else:
temp += i
if temp in dictionary:
ans += dictionary[temp]
temp = ""
return int(ans)
def solution(sizes):
rotated = []
# 가로, 세로 길이 중에서 더 긴 값을 가로로 두기 -> 돌린다
for i in sizes:
if i[0] < i[1]:
i = [i[1], i[0]]
rotated.append(i)
# 모든 명함이 들어갈 수 있는 크기여야 하기 때문에 최댓값 추출
max_w = max(i[0] for i in rotated)
max_h = max(i[1] for i in rotated)
return max_w * max_h
n = int(input())
m = int(input())
# 1. 연결 정보에 대해 입력 받기
con = []
for _ in range(m):
a, b = map(int, input().split())
con.append((a, b))
# con = [[1, 2], [2, 3], [3, 5] ....]
2. 방문 여부를 확인하는 리스트 생성
visited = [False] * (n+1)
3. 연결 정보 -> 그래프로 표현 (양방향 연결)
graph = {}
for i in range(1, n+1):
graph[i] = []
# 결과 : {1: [], 2: [], 3: [], 4: [], 5: []}
for a, b in con:
graph[a].append(b)
graph[b].append(a)
4. 깊이 우선 탐색
def DFS(node):
# 방문한 노드는 true로 표시
visited[node] = True
count = 1 # 방문한 노드는 감염되었기에 숫자 1증가
for n in graph[node]:
if not visited[n]:
count += DFS(n) #방문한 노드의 이웃 노드가 탐색을 안한 곳이라면 그곳을 또 탐색
return count
result = DFS(1)
return result -1
정답
n = int(input())
m = int(input())
# 1. 연결 정보에 대해 입력 받기
con = []
for _ in range(m):
a, b = map(int, input().split())
con.append((a, b))
# con = [[1, 2], [2, 3], [3, 5] ....]
def count(n, con):
# 2. 방문 여부를 확인하는 리스트 생성
visited = [False] * (n+1)
graph = {}
for i in range(1, n+1):
graph[i] = []
# 결과 : {1: [], 2: [], 3: [], 4: [], 5: []}
# 3. 연결 정보 -> 그래프로 표현 (양방향 연결)
for a, b in con:
graph[a].append(b)
graph[b].append(a)
def DFS(node):
# 방문한 노드는 true로 표시
visited[node] = True
count = 1 # 방문한 노드는 감염되었기에 숫자 1증가
for n in graph[node]:
if not visited[n]:
count += DFS(n) #방문한 노드의 이웃 노드가 탐색을 안한 곳이라면 그곳을 또 탐색
return count
result = DFS(1)
return result -1
print(count(n, con))
def solution(number):
answer = 0
for i in range(0, len(number)):
for j in range(i+1, len(number)):
for k in range(j+1, len(number)):
if number[i] + number[j] + number[k] == 0:
answer += 1
return answer
크기가 작은 부분 문자열
첫 번째 시도 -> 하지만 테스트 케이스에서 시간 초과 및 빈 객체에 pop했다는 에러 뜸
len(deq) >= len(p) 이 조건 또한 빼먹음
import collections
def solution(t, p):
answer = 0
deq = collections.deque(t)
while len(deq) >= len(p):
d = ""
copy = ""
recover = []
for _ in range(len(p)):
d += deq.popleft()
copy = d[:]
if int(p) >= int(copy):
answer += 1
recover = list(d)
for _ in range(2):
deq.appendleft(recover.pop())
return answer
크기가 작은 부크기가 작은 부분 문자
두 번째 시도
그냥 덱이고 뭐고 슬라이싱을 하면 되는 거였다..
뭔가 괜히 어렵게 생각하는 습관이 있는 것 같다;; (아직 개념적인 걸? 잘 몰라서 그런 것 같음)
import collections
def solution(t, p):
answer = 0
t_len = len(t)
p_len = len(p)
start = 0
end = p_len
while t_len - p_len >= 0:
n = int(t[start:end])
if n <= int(p):
answer += 1
start += 1
end += 1
t_len -= 1
return answer
arr = input()[1:-1].split(',') : 입력받은 문자열에서 양옆제외하고 읽어온 후 ,을 기준으로 분리해서 값들을 배열로 저장
deq = collections.deque(arr) : 배열 통째로 덱에 추가
result = "[" + ",".join(map(str, deq)) + "]" , 을 사용하여 원소사이를 붙여줌
import collections
t = int(input())
ans = []
for _ in range(t):
ac = input()
n = int(input())
arr = input()[1:-1].split(',')
deq = collections.deque(arr)
flag = 0 # 뒤집은 상태인지 아닌지 확인하는 변수, 홀수면 뒤집은 것
err_count = False
if n == 0: # 길이가 0이라면 빈 덱으로 초기화
deq = []
for i in ac:
if i == "R":
flag += 1
if i == "D":
if len(deq) == 0:
ans.append("error")
err_count = True
break
else:
if flag % 2 == 0:
deq.popleft()
else:
deq.pop()
if not err_count:
if flag % 2 == 0:
result = "[" + ",".join(map(str, deq)) + "]"
ans.append(result)
else:
deq.reverse()
result = "[" + ",".join(map(str, deq)) + "]"
ans.append(result)
for i in ans:
print(i)