본문 바로가기

코딩 테스트/Python_백준88

[백준/Python] 7785번 회사에 있는 사람 문제 ■ 7785번 회사에 있는 사람 문제 ■ 코드 풀이 저는 이 문제를 딕셔너리를 활용하여 풀었습니다. 기본적으로 파이썬에서 문자열 탐색은 set이나 dict 자료유형이 속도 측면에서 유리합니다. 그 이유는 해시 테이블(hash table)을 사용하기 때문인데요. 임의의 단어를 숫자로 맵핑하고 이를 인덱스처럼 활용해서 속도가 빠르다고 합니다. (아래 링크의 글에서 제가 처음 배웠기 때문에, 거기에 자세히 적어두었습니다.) 우선 출입 기록을 저장할 수 있는 딕셔너리(record_dict)를 선언합니다. 그리고 사람의 이름을 key값으로 상태가 enter이면 True를, leave이면 False를 value로 저장합니다. 그럼 결과적으로 출입 기록에 'leave'가 없는 사람의 value만 True가 됩니다. .. 2023. 5. 27.
[백준/Python] 14425번 문자열 집합 문제 ■ 14425번 문자열 집합 문제 ■ 코드 풀이 처음에는 리스트를 활용하여 풀었습니다. 시간 초과는 나오지 않았지만, 상당히 시간이 오래 걸렸습니다. 코드 개선을 위해 다른 분들의 글을 참고하니, 재미있는 사실을 발견했습니다. import sys N, M = map(int, sys.stdin.readline().split()) S = [] count = 0 for _ in range(N): word = sys.stdin.readline().strip() S.append(word) for _ in range(M): check = sys.stdin.readline().strip() if check in S: count +=1 print(count) 파이썬에서는 set 또는 딕셔너리와 같은 자료형이 리스트 대.. 2023. 5. 26.
[백준/Python] 10815번 숫자 카드 문제 ■ 10815번 숫자 카드 문제 ■ 코드 풀이 문제를 보자마자 느낀 것은 배열의 크기가 비정상적으로 크다는 것이었습니다. 그러나 아무리 궁리해서 풀어도 시간 초과가 나오더군요. 그래서 인터넷에서 찾으니, 이 문제의 핵심은 '큰 배열을 얼마나 효과적으로 탐색할 수 있는가'였습니다. 그리고 여기서 이진 탐색이라는 기초적인 알고리즘에 대해 배웠습니다. 이진 탐색은 오름차순으로 정렬된 리스트의 목록에서 절반씩 탐색 범위를 줄여가며 목표를 찾습니다. 자세한 설명은 코드 아래에 링크로 넣어두었습니다. 아래는 코드입니다. 핵심은 while문인데, 중간 지점을 갱신하는 과정입니다. 중간 지점이라 함은 start와 end 포인트의 절반 지점을 의미합니다. 예를 들면, 0과 100 사이의 범위에서 목표가 77일 경우 중간.. 2023. 5. 23.