개발자 톡
연습문제 톡
[HSAT 6회 정기 코딩 인증평가 기출] 염기서열 커버
11개 테스트케이스 오답으로 나와요.. 예제 부탁드려요 ㅠㅠ
- 등록일
- 2024-02-14 19:16:34
- 조회수
- 587
- 작성자
- ellie19981008
제목대로 테스트케이스 11개가 오답으로 처리됩니다.. 시간초과는 아니구요! 아래코드는 간단한 주석을 달고 올립니다. 고수님들 부탁 드립니다..
개발자톡에서 몇몇분이 올려주신 엣지케이스들은 통과가 되고 있어요.. ! 제 코드에 해당될 것 같은 반례나, 개선점 제안 부탁 드립니다!
import sys #초기 n,m값 받기 n, m = map(int, sys.stdin.readline().split()) def solution(n,m): #염기서열 입력값 저장 initial = [] for _ in range(n): line = sys.stdin.readline().rstrip() if len(line) == m: initial.append(line) #복잡한 아이들 찾기 (알파벳 많이 들어갈 수록 복잡하다) --> 알파벳 포함된 갯수가 dict의 key, 해당 문자열은 list화 된 value로 저장. tmp = {} for elem in initial: count = 0 for i in range(m): if elem[i] != '.': count += 1 if count not in tmp.keys(): tmp[count] = [elem] else: tmp[count].append(elem) #복잡한 순서대로 사전을 정렬 (dict의 key가 클 수록 복잡하다) sorted_dict = dict(sorted(tmp.items(), key=lambda x: x[0], reverse=True)) #복잡한 순서대로 정렬된 아이들을 하나의 list로 통합 lines = [] for key, value in sorted_dict.items(): lines.extend(value) #복잡한 순서대로 정렬한 list를 앞에서부터 하나씩 제거해가며 다른애들과 비교한다. 비교해서 문제없을 시, 해당 다른 아이도 삭제한다. s = None answer = 0 while len(lines) > 0: s = lines.pop(0) answer += 1 need_to_delete = [] for i in range(len(lines)): same = True for j in range(m): if s[j] != '.' and lines[i][j] != '.' and s[j] != lines[i][j]: same = False if same == True: need_to_delete.append(lines[i]) for value in need_to_delete: lines.remove(value) return answer # n,m 이 제대로 주어지지 않을시를 대비하여 ... if n>0 and m>0: print(solution(n,m))
#[HSAT_6회_정기_코딩_인증평가_기출]_염기서열_커버
#염기서열.기출.기출문제.염기서열_커버