본문 바로가기
반응형

프로그래밍54

[python] 조합(combinations) 기초 & 조합 사용법 조합 (combinations) 언제 사용할까? 2차원 배열이 있다고 하자. [[1,"sunny","music"],[2,"hi","math"],[3,"bye","math"]] 컬럼 개수 별로 모든 쌍을 구해야 하는 경우 요긴하게 쓰인다. 1개쌍 : (1,) / ('sunny',) / (2,) / ('hi',) / (3,) / ('bye',) 2개쌍 : (1,"sunny"), (1,"music"),("sunny","music") / ... / (3,"bye"),(3,"mail"),("bye","mail") 3개쌍 : (1,"sunny","music") / ... / (3,"bye","math") 예를 들어 학번,이름,전공이 주어진 2차원 배열이 주어졌다. (학번,이름), (학번,전공), (이름,전공), (.. 2019. 9. 6.
[프로그래머스] kakao 2018 코딩테스트 - 후보키 (python) 다른사람 풀이 참고해서 다시 코딩 from itertools import combinations def solution(data): result = 0 col_cnt=len(data[0]) lst=list(range(0,col_cnt)) c_lst=[] final=[] for i in range(1,col_cnt+1): c=combinations(lst,i) c_lst.extend(c) # 유일성 만족하는 조합 찾기 for i in c_lst: final_tmp=[] for row in range(0,len(data)): tmp_lst=[] for t in i: tmp_lst.append(data[row][t]) final_tmp.append(tuple(tmp_lst)) #check (컬럼 조합한 값에서.. 2019. 9. 4.
[프로그래머스] kakao 2018 코딩테스트 - 오픈채팅방 (python) def solution(record): answer = [] id_nic={} # uid / 닉네임 딕셔너리 생성 for i in range(len(record)): temp=record[i].split(" ") if temp[0]!="Leave": id_nic[temp[1]]=temp[2] # 결과값 출력 for i in range(len(record)): temp=record[i].split(" ") if temp[0]=="Enter": answer.append(id_nic[temp[1]]+"님이 "+"들어왔습니다.") elif temp[0]=="Leave": answer.append(id_nic[temp[1]]+"님이 "+"나갔습니다.") return answer 아이디어 Enter 혹은 Chang.. 2019. 9. 3.
[프로그래머스] KAKAO 2018 코딩테스트 - 실패율 (python) 1차시도 import collections import operator def solution(N, stages): answer = [] user_stage=collections.Counter(stages) fail={} for i in range(1,N+1): if user_stage[i]==0: max_key=i else: del user_stage[i-1] fail[i]=(sum(user_stage.values())/float(user_stage[i])) stage_result=sorted(fail.items(), key=operator.itemgetter(1)) for i in range(len(stage_result)): answer.append(stage_result[i][0]) answer... 2019. 9. 2.
[프로그래머스] 해시 - 전화번호 목록 (python) 1차시도! 성공인데 사실은 틀린 코드 def solution(phone_book): answer = True phone_book.sort() phone_book_dict=dict(zip(phone_book,range(len(phone_book)))) for i in phone_book: phone_book_dict.pop(i) for j in phone_book_dict: if i in j: return False return answer 아이디어 비교 횟수를 줄이기 위해 phone_book을 정렬합니다. phone_book 리스트의 값을 key로 갖는 딕셔너리를 만듭니다. phone_book 리스트의 각 요소가 (for i in phone_book) 다른 요소값(phone_book_dict.pop(i).. 2019. 8. 28.
[프로그래머스] 해시 - 완주하지 못한 선수 (python) 1차시도 리스트로 노가다 def solution(participant, completion): answer="" for i in participant: if len(completion)==False: answer=i break for j in range(len(completion)): if i==completion[j]: flag=True completion.pop(j) break else: flag=False if flag==False: answer=i break return answer 아이디어 participant 참가자 한 명씩 completion 명단에 있는지 확인합니다. 있으면 그 다음 참가자가 확인하고, 없으면 completion 명단 끝까지 없는건지 확인합니다. 틀린이유 효율성 테스트 실패.. 2019. 8. 27.
반응형