-
9375. 패션왕 신해빈Algorithm/Baekjoon 2023. 2. 6. 20:14
경우의 수 문제... 같은 종류의 의상은 하나만 입을 수 있다. 그럼 예를 들어 headgear 종류의 의상을 입을 수 있는 경우는 hat을 입거나, turban을 입거나, 입지 않거나의 경우가 있다. 이걸 경우마다 계산 한 뒤 다 곱해주면 매일 옷을 입을 수 있는 경우의 수다. 여기서 알몸은 불가능하므로 1을 빼주어야 함. import sys input = sys.stdin.readline n = int(input()) for _ in range(n) : products = {} cases = 1 num = int(input()) for _ in range(num) : product = input().rstrip().split()[1] if product in products : products[pro..
-
19583. 싸이버개강총회Algorithm/Baekjoon 2023. 2. 5. 23:55
길다 길어 문제 자체는 간단하다. 다만, 채팅기록을 몇줄 입력할 건지 명시하지 않기 때문에 EOF까지 입력을 받아야 한다. 이건 try - except로 처리할 수 있겠다. 또 하나 주의할 점은, 채팅 기록을 여러번 남긴 학회원의 경우 중복으로 출석처리될 수 있기에 한번 체크했으면 set에서 지워주어야 한다는 것이다. 나도 이 부분을 놓쳐서 두번 날렸다... import sys input = sys.stdin.readline start, end, end_s = input().split() attend = set() cnt = 0 while True : try : time, name = input().split() if time = end and time
-
2002. 추월Algorithm/Baekjoon 2023. 2. 5. 18:44
예제 입력을 간단하게 표현해야겠다고 생각하면 풀 수 있는 문제이다. 처음 들어간 자동차들을 순서대로 숫자로 표현하고, 터널에서 나온 자동차는 들어갔을 때 몇번이었는지를 표현할 수 있으면 된다. import sys input = sys.stdin.readline def count_pass(after) : cnt = 0 for i in range(len(after)) : for j in range(i+1, len(after)) : if after[i] > after[j] : cnt += 1 break return cnt num = int(input()) before = {} after = [] for i in range(num) : before[input().rstrip()] = i for i in rang..
-
1946. 신입사원Algorithm/Baekjoon 2023. 2. 5. 17:00
처음에 문제 이해를 못했다. 적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발한다는 건 서류 심사 결과와 면접 성적이 모두 떨어지면 선발되지 않는다는 건데... 그럼 꼴찌만 아니면 되는 건가? 이러고 있었음 핵심은, A가 서류 심사 성적이 낮아도 서류 심사 성적이 더 높은 사람보다 A의 면접 성적이 높다면 선발할 수 있다는 의미이다. 반대로, A가 면접 성적이 낮아도 A보다 면접 성적이 높은 사람보다 A의 서류 성적이 더 높다면 선발할 수 있다. 그럼 어떻게 풀어야 할까? 서류 심사 순위 순으로 정렬한 뒤, 면접 순위가 앞선 서류 심사 순위자의 면접 순위들보다 높다면 선발하도록 한다. import sys input = sys.stdin.readline n = int(input()) for _ in ..
-
12840. 창용이의 시계Algorithm/Baekjoon 2023. 2. 5. 03:49
지금은 이렇게 푼 문제를 대강 올리지만, 나중에는 정리할 만한 문제들만 정성스럽게 올릴까 생각 중에 있음. 이 문제의 핵심은 시,분,초로 표현되어 있는 시간을 모두 초단위로 바꾸는 것이다. 그래야 문제를 훨씬 쉽게 풀어낼 수 있다. import sys input = sys.stdin.readline MIN = 60 HOUR = MIN*60 DAY = HOUR*24 h, m ,s = map(int, input().split()) time = h*HOUR + m*MIN + s def time_print(time) : h = time//HOUR time %= HOUR m = time//MIN time %= MIN print(h, m, time) def time_coordi(seconds) : global ti..
-
10804. 카드 역배치Algorithm/Baekjoon 2023. 2. 5. 03:41
리스트 슬라이싱을 잘 알고 있으면 어렵지 않게 풀 수 있다. import sys input = sys.stdin.readline arr = [i for i in range(0,21)] def reverse(left, right) : arr[left:right+1] = arr[right:left-1:-1] return for _ in range(10) : a, b = map(int, input().split()) reverse(a, b) print(*arr[1:]) 리스트 슬라이싱 시 시작과 끝의 인덱스를 잘 고려해서 적어야 한다. 항상 시작 인덱스는 포함되고 끝 인덱스는 포함되지 않는다는 것을 기억할 것.
-
10825. 국영수Algorithm/Baekjoon 2023. 2. 5. 03:35
재밌게 봤던 웹툰 방과후 전쟁활동에서 저런 캐릭터 이름이 있었는데... 파이썬 sorted 함수를 사용하면 어렵지 않게 풀 수 있는 문제이다. sorted 함수에서는 key값으로 파이썬 lambda 함수를 넣어 원하는 조건대로 정렬이 가능하다. 정렬의 우선 순위를 담은 튜플을 리턴하는 람다함수를 전달한다. - 응용하여 문자열 길이순 정렬 등도 할 수 있음. import sys n = int(sys.stdin.readline()) main_list = [0 for _ in range(n)] for i in range(n) : [name, kor, eng, math] = sys.stdin.readline().split() main_list[i] = [name, int(kor), int(eng), int(ma..
-
2751. 수 정렬하기 2Algorithm/Baekjoon 2023. 2. 5. 03:26
간단하게 sort 혹은 sorted로 풀 수 있는 문제이다. import sys n = int(sys.stdin.readline()) numbers = [0 for _ in range(n)] for i in range(n) : numbers[i] = int(sys.stdin.readline()) numbers.sort() for i in numbers : print(i) 과거에 위와 같이 아주 간단하게 풀었으나, 2750도 버블정렬로 풀었으니 이것도 합병정렬도 풀어보기로 하였음. def merge_sort(array) : if len(array)