-
1213. 팰린드롬 만들기Algorithm/Baekjoon 2023. 2. 7. 00:41
이것도 깔끔하게 풀겠다고 정답화면을 서너번은 봤다... 의식의 흐름대로 푼 초기 버전 import sys input = sys.stdin.readline def palindrome(arr) : alphabets = {} half = [] center = [] result = [] for c in arr : if c in alphabets : alphabets[c] += 1 else : alphabets[c] = 1 alphabets = sorted(alphabets.items()) for c, cnt in alphabets : if cnt%2 == 0 : half.extend([c]*(cnt//2)) elif cnt%2 != 0 and center : print("I'm Sorry Hansoo") ret..
-
4949. 균형잡힌 세상Algorithm/Baekjoon 2023. 2. 6. 23:26
코드를 깔끔하게 짜고 싶은데 잘 안되고 있어서 답답하다. 이번에도 깔끔하게 짜려고 용쓰다가 풀이하는데 생각보다 오래 걸렸음... 문제의 조건을 조금 더 꼼꼼하게 보고 생각해서 풀자 import sys input = sys.stdin.readline def check(line) : pair = [] p = {')' : '(', ']' : '['} for c in line : if c == '(' or c == '[' : pair.append(c) elif (c == ')' or c == ']') : if len(pair) > 0 and (p[c] == pair[-1]) : pair.pop() else : return False if len(pair) == 0 : return True else : retur..
-
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:]) 리스트 슬라이싱 시 시작과 끝의 인덱스를 잘 고려해서 적어야 한다. 항상 시작 인덱스는 포함되고 끝 인덱스는 포함되지 않는다는 것을 기억할 것.