코딩테스트)날짜순으로 메모를 정렬하라-1

장석빈·2022년 6월 8일
0

문제 내용 요약 : 3개의 문자열이 주어지고 이 문자열에서 날짜에 관한 정보를 추출하고 이를 비교하여 오름차순으로 주어진 문자열을 출력하는 문제이다.
1번째 풀이방식

l1 = []
//문자열을 입력받아 리스트 l1에 저장
while True:
  temp = input()
  if temp == "END":
    break
  else:
    l1.append(temp)
import re
l2 = []
for i in l1:
  temp = re.findall(r'\d+', i)//문자열에서 연속된 숫자만 추출하여 리스트로 저장
  print(temp)
  if len(temp[0]) == 4:
    temp[0] = temp[0][2:]
  if len(temp[1]) == 1:
    temp[1] = "0" + temp[1]
  if len(temp[2]) == 1:
    temp[2] = "0" + temp[2]
  result = ""
  for j in temp:
    result += j
  l2.append(int(result))
i1 = l2.index(min(l2))
i3 = l2.index(max(l2))
i2 = 3 - i1 - i3
print(l1[i1])
print(l1[i2])
print(l1[i3])
      

설명 : 주어진 문자열에서 숫자만을 추출하여 이 데이터를 비교가능하게 가공하고 오름차순으로 주어진 문자열을 출력하려했지만 이는 정답이 아니었다. 정답이 아니라는 것을 찾는 과정이 어려웠는데 나의 추측으로는 이 방식은 문자열에서 숫자를 추출하여 비교하는 것인데 만약에 문자열에 날짜에 관련된 숫자 이외에 또 다른 숫자가 있을 경우 날짜만을 비교하여 출력하는 것이 불가능하다.
따라서 다른 방법을 찾아야했다.

풀이방식2
날짜의 형식이 XX/XX/XX or XX년XX월XX일 or XX-XX-XX 형식이라고 했으니 주어진 문자열에서 반복문을 통해 문자 "/", "년","월","일", "-"을 검색하여서 날짜를 추출하는 방법으로 풀어보기로했고 이 방법은 날짜이외에 다른 숫자를 포함하지 않으므로 적절한 해결방안이라고 추측된다.

import re
l = []
while True:
  temp = input()
  if temp == "END":
    break
  else:
    l.append(temp)
l2 = []
for i in l:
  if "-" in i:
    start = i.find("-") - 2
    end = i.rfind("-") + 3
    l2.append(re.findall(r'\d+', i[start:end]))
  elif "/" in i:
    start = i.find("/") - 2
    end = i.rfind("/") + 3
    l2.append(re.findall(r'\d+', i[start:end]))
  else:
    start = i.find("년") - 2
    end = i.rfind("일")
    l2.append(re.findall(r'\d+', i[start:end]))
l3 = []
for i in l2:
  temp = ""
  for j in i:
    if len(j) != 2:
      j = "0" + j
    temp += j
  l3.append(int(temp))
i1 = l3.index(min(l3))
i3 = l3.index(max(l3))
i2 = 3 - i1 - i3
print(l[i1])
print(l[i2])
print(l[i3])
  

위와 같이 코드를 수정해서 문제를 제출하였지만 아쉽게도 테스트케이스 1개만 정답이고 나머지는 오답처리되었다,,,,2편에서 계속

profile
회피형 인간의 개과천선기

0개의 댓글