11 May 2017
|
알고리즘
프로그래밍
문제출처
문제
앞뒤를 뒤집어도 똑같은 문자열을 palindrome이라고 합니다.
longest_palindrom함수는 문자열 s를 매개변수로 입력받습니다.
s의 부분문자열중 가장 긴 palindrom의 길이를 리턴하는 함수를 완성하세요.
예를들어 s가 “토마토맛토마토”이면 7을 리턴하고 “토마토맛있어”이면 3을 리턴합니다.
풀이코드
def longest_palindrom(s):
list_s = list(s)
if list_s == list_s[::-1]:
return len(list_s)
result = []
for idx, item in enumerate(list_s):
if item in list_s[idx+1:]:
idx2 = list_s[idx+1:].index(item) + idx+2
if list_s[idx:idx2] == (list_s[idx:idx2])[::-1]:
result.append(len(list_s[idx:idx2]))
if len(result) == 0:
return 1
return max(result)
print(longest_palindrom("토마토맛토마토")) # 7
print(longest_palindrom("토마토맛있어")) # 3
print(longest_palindrom("맛있어토마토")) # 3
11 May 2017
|
알고리즘
프로그래밍
문제출처
문제
is_pair함수는 문자열 s를 매개변수로 입력받습니다.
s에 괄호가 알맞게 짝지어져 있으면 True를 아니면 False를 리턴하는 함수를 완성하세요.
예를들어 s가 “(hello)()”면 True이고, “)(“이면 False입니다.
s가 빈 문자열(““)인 경우는 없습니다.
풀이코드
- stack을 활용한다.
- 빈 stack 에는 “(“ 만 들어갈 수 있다.
- ”)” 이 올때까지 “(“ 를 쌓다가, “)” 이 오면 “(“ 하나와 함께 pop
- 마지막에 빈 stack 이 남으면 True, 아니면 False
def is_pair(s):
stack = []
for ch in s:
if ch == "(":
stack.append(ch)
elif ch == ")":
try:
stack.pop()
except IndexError:
return False
return len(stack) == 0
04 May 2017
|
알고리즘
프로그래밍
문제출처
문제
직사각형을 만드는 데 필요한 4개의 점 중 3개의 좌표가 주어질 때, 나머지 한 점의 좌표를 반환하는 solution 함수를 완성해 주세요. 단, 직사각형의 각 변은 x축, 혹은 y축에 평행하며, 반드시 직사각형을 만들 수 있는 경우만 입력으로 주어집니다.
제한사항
좌표값 : 10억이하의 자연수
입출력 예
v [[1, 4], [3, 4], [3, 10]]
result [1, 10]
v [[1, 1], [2, 2], [1, 2]]
result [2, 1]
입출력 예 설명
입출력 예 1
주어진 점의 좌표가 [[1, 4], [3, 4], [3, 10]] 일때, [1, 10]에 점이 위치하면 직사각형이 됩니다.
입출력 예 2
주어진 점의 좌표가 [[1, 1], [2, 2], [1, 2]] 일때, [2, 1]에 점이 위치하면 직사각형이 됩니다.
풀이코드
def solution(v):
answer = []
v1 = []
v2 = []
for i in v:
if i[0] not in v1:
v1.append(i[0])
else:
v1.remove(i[0])
if i[1] not in v2:
v2.append(i[1])
else:
v2.remove(i[1])
answer = v1 + v2
return answer