match_skill 길이만큼 list를 생성한다. 예를 들어 아래 케이스의 경우 : [0, 1, 2, 3]
정렬된 result과 result길이 만큼 짤린 match_skill 의 값이 같을 경우 예를 들어 result=[0,1] result과 result길이 만큼 짤린 match_skill 의 값이 같을 경우 result=[1,0]을 방지하기 위해서
def solution(skill, skill_trees):
answer = 0
match_skill = "".join([str(i) for i in range(len(skill))])
for skill_tree in skill_trees:
result= ""
for i in skill_tree:
skill_index = skill.find(i)
if (skill_index) != -1:
result += str(skill_index)
if result == match_skill[:len(result)]:
answer+= 1
return answer
캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다.
예를 들어, "ULURRDLLU"로 명령했다면
1번 명령어부터 7번 명령어까지 다음과 같이 움직입니다.
8번 명령어부터 9번 명령어까지 다음과 같이 움직입니다.
이때, 우리는 게임 캐릭터가 지나간 길 중캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다. 예를 들어 위의 예시에서 게임 캐릭터가 움직인 길이는 9이지만, 캐릭터가 처음 걸어본 길의 길이는 7이 됩니다. (8, 9번 명령어에서 움직인 길은 2, 3번 명령어에서 이미 거쳐 간 길입니다)
단, 좌표평면의 경계를 넘어가는 명령어는 무시합니다.
예를 들어, "LULLLLLLU"로 명령했다면
1번 명령어부터 6번 명령어대로 움직인 후, 7, 8번 명령어는 무시합니다. 다시 9번 명령어대로 움직입니다.
이때 캐릭터가 처음 걸어본 길의 길이는 7이 됩니다.
명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return 하는 solution 함수를 완성해 주세요.
제한사항
dirs는 string형으로 주어지며, 'U', 'D', 'R', 'L' 이외에 문자는 주어지지 않습니다.
dirs의 길이는 500 이하의 자연수입니다.
입출력 예dirsanswer
"ULURRDLLU"
7
"LULLLLLLU"
7
입출력 예 설명
입출력 예 #1 문제의 예시와 같습니다.
입출력 예 #2 문제의 예시와 같습니다.
foot = tuple(sorted([foot_list[-1], (next_i, next_j)])) => 이 부분을 다른 사람 풀이 참조 하였다.
def solution(dirs):
dirs_dic = {'U':[0,-1],'D':[0,1], 'R':[1,0],'L':[-1,0]}
answer = 0
_list = []
for i in dirs:
_list.append(dirs_dic.get(i))
foot_list = [(0,0)]
footprint = set()
# 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다.
for i, j in _list:
next_i, next_j = foot_list[-1][0]+i, foot_list[-1][1]+j
if -5 <= next_i <= 5 and -5 <= next_j <= 5:
foot = tuple(sorted([foot_list[-1], (next_i, next_j)]))
footprint.add(foot)
foot_list.append((next_i,next_j))
answer+=len(footprint)
return answer
라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, 라디오 등에서 나온 음악에 관해 제목 등의 정보를 제공하는 서비스이다.
네오는 자신이 기억한 멜로디를 가지고 방금그곡을 이용해 음악을 찾는다. 그런데 라디오 방송에서는 한 음악을 반복해서 재생할 때도 있어서 네오가 기억하고 있는 멜로디는 음악 끝부분과 처음 부분이 이어서 재생된 멜로디일 수도 있다. 반대로, 한 음악을 중간에 끊을 경우 원본 음악에는 네오가 기억한 멜로디가 들어있다 해도 그 곡이 네오가 들은 곡이 아닐 수도 있다. 그렇기 때문에 네오는 기억한 멜로디를 재생 시간과 제공된 악보를 직접 보면서 비교하려고 한다. 다음과 같은 가정을 할 때 네오가 찾으려는 음악의 제목을 구하여라.
방금그곡 서비스에서는 음악 제목, 재생이 시작되고 끝난 시각, 악보를 제공한다.
네오가 기억한 멜로디와 악보에 사용되는 음은 C, C#, D, D#, E, F, F#, G, G#, A, A#, B 12개이다.
각 음은 1분에 1개씩 재생된다. 음악은 반드시 처음부터 재생되며 음악 길이보다 재생된 시간이 길 때는 음악이 끊김 없이 처음부터 반복해서 재생된다. 음악 길이보다 재생된 시간이 짧을 때는 처음부터 재생 시간만큼만 재생된다.
음악이 00:00를 넘겨서까지 재생되는 일은 없다.
조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. 재생된 시간도 같을 경우 먼저 입력된 음악 제목을 반환한다.
조건이 일치하는 음악이 없을 때에는 “(None)”을 반환한다.
입력 형식
입력으로 네오가 기억한 멜로디를 담은 문자열m과 방송된 곡의 정보를 담고 있는 배열musicinfos가 주어진다.
m은 음1개 이상1439개 이하로 구성되어 있다.
musicinfos는100개 이하의 곡 정보를 담고 있는 배열로, 각각의 곡 정보는 음악이 시작한 시각, 끝난 시각, 음악 제목, 악보 정보가 ','로 구분된 문자열이다.
첫 번째 예시에서 HELLO는 길이가 7분이지만 12:00부터 12:14까지 재생되었으므로 실제로 CDEFGABCDEFGAB로 재생되었고, 이 중에 기억한 멜로디인 ABCDEFG가 들어있다. 세 번째 예시에서 HELLO는 C#DEFGABC#DEFGAB로, WORLD는 ABCDE로 재생되었다. HELLO 안에 있는 ABC#은 기억한 멜로디인 ABC와 일치하지 않고, WORLD 안에 있는 ABC가 기억한 멜로디와 일치한다.
풀이 과정:
테스트 4 〉
실패 (2.63ms, 10.9MB)
테스트 11 〉
실패 (4.38ms, 10.9MB)
테스트 20 〉
실패 (2.51ms, 10.8MB)
테스트 22 〉
실패 (2.63ms, 10.9MB)
테스트 23 〉
실패 (2.68ms, 10.9MB)
테스트 24 〉
실패 (2.52ms, 10.8MB)
테스트 27 〉
실패 (2.07ms, 10.8MB)
테스트 28 〉
실패 (1.98ms, 10.8MB)
테스트 29 〉
실패 (4.36ms, 10.9MB)
answer = '(None)' 을 추가해서
테스트 4 〉
실패 (2.33ms, 10.9MB)
테스트 11 〉
실패 (3.71ms, 10.9MB)
테스트 20 〉
실패 (2.46ms, 10.8MB)
테스트 27 〉
실패 (2.38ms, 10.8MB)
테스트 28 〉
실패 (2.17ms, 10.9MB)
조건이 일치하는 음악이 여러 개일 때에는 라디오에서 재생된 시간이 제일 긴 음악 제목을 반환한다. => 이부분을 수정하니 30만 틀린다.
테스트 30 〉
실패 (4.23ms, 10.9MB)
재생시간이 짧을 때 짤라줘서 성공하였다.
from datetime import datetime
def dif(start, end):
start = datetime.strptime(start,'%H:%M')
end = datetime.strptime(end,'%H:%M')
diff = end-start
return diff.seconds// 60
def solution(m, musicinfos):
answer = []
#이 부분은 참조
rmm ={'C#': 'c','D#': 'd','F#': 'f','G#': 'g','A#': 'a','E#': 'e'}
for keys in rmm.keys() :
m = m.replace(keys, rmm.get(keys))
for i in musicinfos:
musicinfo = i.split(',')
diff = dif(musicinfo[0],musicinfo[1])
m_= musicinfo[-1]
for keys in rmm.keys() :
m_ = m_.replace(keys, rmm.get(keys))
cnt = 0
while len(m_) < diff:
m_ += m_[cnt]
cnt+=1
if len(m_) > diff:
m_ = m[:diff+1]
if m in m_:
answer.append((musicinfo[2],diff,musicinfo[0]))
if not len(answer):
return '(None)'
return max(answer,key = lambda x:x[1])[0]
m = "CC#BCC#BCC#BCC#B"
musicinfos = ["03:00,03:30,FOO,CC#B","03:00,03:01,FOO,CC#B","02:00,02:30,FOO2,CC#B", "04:00,04:08,BAR,CC#BCC#BCC#B"]
solution(m, musicinfos)
1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
예를 들어
1234
0
1
1
1
1
1
1
1
1
1
1
1
0
0
1
0
가 있다면 가장 큰 정사각형은
1234
0
1
1
1
1
1
1
1
1
1
1
1
0
0
1
0
가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.
제한사항
표(board)는 2차원 배열로 주어집니다.
표(board)의 행(row)의 크기 : 1,000 이하의 자연수
표(board)의 열(column)의 크기 : 1,000 이하의 자연수
표(board)의 값은 1또는 0으로만 이루어져 있습니다.
입출력 예boardanswer
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]]
9
[[0,0,1,1],[1,1,1,1]]
4
입출력 예 설명
입출력 예 #1 위의 예시와 같습니다.
입출력 예 #2 | 0 | 0 |1|1| | 1 | 1 |1|1| 로 가장 큰 정사각형의 넓이는 4가 되므로 4를 return합니다.
def solution(board):
answer = 0
n = len(board)
for i in range(1,n):
for j in range(1,len(board[i])):
if board[i][j] == 1 :
board[i][j] = min(board[i-1][j-1],board[i-1][j],board[i][j-1])+1
answer = []
for i in range(n):
answer.append(max(board[i]))
return max(answer)**2
board = [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]]
solution(board)
dict_ = {}
index_ = 1
for x in range(65,91):
dict_[chr(x)] = index_
index_ += 1
def solution(msg):
answer = []
i = 0
w = msg[0]
while i != len(msg):
if w in dict_.keys():
if i != len(msg)-1:
i+= 1
else:
answer.append(dict_.get(w))
print(w, answer)
break
w += msg[i]
else:
dict_[w] = max(dict_.values())+1
answer.append(dict_.get(w[:-1]))
w = msg[i]
return answer
msg="KAKAO"
solution(msg)
세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다.
저장소 서버에는 프로그램의 과거 버전을 모두 담고 있어, 이름 순으로 정렬된 파일 목록은 보기가 불편했다. 파일을 이름 순으로 정렬하면 나중에 만들어진 ver-10.zip이 ver-9.zip보다 먼저 표시되기 때문이다.
버전 번호 외에도 숫자가 포함된 파일 목록은 여러 면에서 관리하기 불편했다. 예컨대 파일 목록이 ["img12.png", "img10.png", "img2.png", "img1.png"]일 경우, 일반적인 정렬은 ["img1.png", "img10.png", "img12.png", "img2.png"] 순이 되지만, 숫자 순으로 정렬된 ["img1.png", "img2.png", "img10.png", img12.png"] 순이 훨씬 자연스럽다.
무지는 단순한 문자 코드 순이 아닌, 파일명에 포함된 숫자를 반영한 정렬 기능을 저장소 관리 프로그램에 구현하기로 했다.
소스 파일 저장소에 저장된 파일명은 100 글자 이내로, 영문 대소문자, 숫자, 공백(" "), 마침표("."), 빼기 부호("-")만으로 이루어져 있다. 파일명은 영문자로 시작하며, 숫자를 하나 이상 포함하고 있다.
파일명은 크게 HEAD, NUMBER, TAIL의 세 부분으로 구성된다.
HEAD는 숫자가 아닌 문자로 이루어져 있으며, 최소한 한 글자 이상이다.
NUMBER는 한 글자에서 최대 다섯 글자 사이의 연속된 숫자로 이루어져 있으며, 앞쪽에 0이 올 수 있다.0부터99999사이의 숫자로,00000이나0101등도 가능하다.
TAIL은 그 나머지 부분으로, 여기에는 숫자가 다시 나타날 수도 있으며, 아무 글자도 없을 수 있다.
파일명HEADNUMBERTAIL
foo9.txt
foo
9
.txt
foo010bar020.zip
foo
010
bar020.zip
F-15
F-
15
(빈 문자열)
파일명을 세 부분으로 나눈 후, 다음 기준에 따라 파일명을 정렬한다.
파일명은 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다. 이때, 문자열 비교 시 대소문자 구분을 하지 않는다.MUZI와muzi,MuZi는 정렬 시에 같은 순서로 취급된다.
파일명의 HEAD 부분이 대소문자 차이 외에는 같을 경우, NUMBER의 숫자 순으로 정렬한다. 9 < 10 < 0011 < 012 < 13 < 014 순으로 정렬된다. 숫자 앞의 0은 무시되며, 012와 12는 정렬 시에 같은 같은 값으로 처리된다.
두 파일의 HEAD 부분과, NUMBER의 숫자도 같을 경우, 원래 입력에 주어진 순서를 유지한다.MUZI01.zip과muzi1.png가 입력으로 들어오면, 정렬 후에도 입력 시 주어진 두 파일의 순서가 바뀌어서는 안 된다.
무지를 도와 파일명 정렬 프로그램을 구현하라.
입력 형식
입력으로 배열files가 주어진다.
files는 1000 개 이하의 파일명을 포함하는 문자열 배열이다.
각 파일명은 100 글자 이하 길이로, 영문 대소문자, 숫자, 공백(" "), 마침표("."), 빼기 부호("-")만으로 이루어져 있다. 파일명은 영문자로 시작하며, 숫자를 하나 이상 포함하고 있다.
중복된 파일명은 없으나, 대소문자나 숫자 앞부분의 0 차이가 있는 경우는 함께 주어질 수 있다. (muzi1.txt,MUZI1.txt,muzi001.txt,muzi1.TXT는 함께 입력으로 주어질 수 있다.)