import re
arr = []
arr2=[]
while True:
arr.extend(input().split())
if arr[-1] == 'E-N-D':
break
for i in arr:
arr2.append(re.sub('[^a-z-]','',i.lower()))
print(sorted(arr2, key=lambda x : len(x), reverse=True)[0])
<코드 설명>
문자열들을 split하여 input해주고 이를 arr에 extend해주었다.
arr의 마지막 원소가 'E-N-D'이면 while문을 break한다.
arr의 원소 중 알파벳(a-z, A-Z)과 하이픈(-) 빼고 제외해주었으며, 결과를 소문자로 출력해주어야 하므로 lower()해주었다. 그리고 이 를 arr2 리스트에 append해주었다.
import itertools
tc=int(input())
arr=[]
for _ in range(tc):
arr.append(int(input()))
per=list(itertools.permutations(arr,2))
sorted=[]
for i in per:
num=str(i[0])+str(i[1])
num=int(num)
sorted.append(num)
sorted.sort()
print(sorted[2])
<코드 설명>
tc로 testcase를 input 받는다.
tc만큼 for문을 반복하여 arr에 숫자들을 입력받는다.
그리고 리스트 내의 원소를 조합해주는 itertools.permutations를 이용하여 arr의 원소들의 모든 조합을 per 변수에 저장해주었다.
per 원소에서의 첫번째 원소와 두번재 원소를 이어주어 num에 저장한 후, int로 형변환을 한다. 그리고 이를 sorted 리스트에 추가해주었다.
이 리스트를 sort해주어 세번째로 작은 수를 출력해주었다.
-> 하지만 메모리 초과 오류가 떴다. 아마 숫자 간의 조합을 모두 구해서 그런 것 같았다.
> 성공 코드
tc=int(input())
arr=[]
for _ in range(tc):
arr.append(int(input()))
arr.sort()
sorted=[]
for i in arr[:4]:
for j in arr[:4]:
if i!=j:
num=int(str(i)+str(j))
sorted.append(num)
sorted.sort()
print(sorted[2])
s=list(input())
i=0
j=0
while True:
if i>=len(s):break
if s[i]=="<":
i+=1
while s[i]!=">":
i+=1
elif s[i].isalnum():
j=i
while i<len(s) and s[i].isalnum():
i+=1
rev=s[j:i]
rev.reverse()
s[j:i]=rev
else:
i+=1
print("".join(s))
<코드 설명>
s를 먼저 입력받는다.i가 s의 길이보다 크거나 같을 때 while문을 빠져나오도록 하였다.
1. s[i]가 "<"일 때, index를 1증가시켜주고 ">"를 만날때까지 index를 증가시켜주어 그대로 출력되도록 하였다.
2. s[i]가 숫자이거나 알파벳인 경우, 시작점인 i를 j에 저장시킨 후 s[i]가 숫자이거나 알파벳이 아닐때까지 i를 증가시켜주었다. 이전에 저장하였던 시작index인 j와 마지막 index인 i까지 reverse()를 적용시켜 다시 s배열 동일 위치에 저장시켰다.