no image
[파이썬] 소프티어 스마트 분류
Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트에서 문제를 확인해주세요. 나의 풀이 앞에 있는 로봇들이 자신의 왼쪽에 위치한 물류 부터 선택하게 하면 결국 최대 로봇 수를 구할 수 있다. import sys line_len, robot_range = map(int, input().split()) line_info = list(input()) count = 0 # 앞에서부터 조회 for idx, obj in enumerate(line_info): if obj == "P": for j in range(idx - robot_range, idx + robot_range + 1): if j line_len - 1: continue elif line_i..
2022.05.19
no image
[파이썬] 소프티어 지도 자동 구축
Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트에서 문제를 확인해주세요. 나의 풀이 반복이 진행될 수록 작은 지도를 반으로 가르는 직선들이 계속 추가 된다. 따라서 n번 째 시행 때 한 변에 놓인 점의 개수는 다음과 같다. $a_n = 2 + \sum_1^{n}2^{n-1}$ import sys n = int(input()) length = 2 for i in range(n): length += (2 ** i) print(length ** 2) 다른 사람 풀이 반으로 나누면서 중간에 겹치는 점이 발생하기 때문에 1을 빼준다. import sys N = int(sys.stdin.readline()) dp = [0] * 16 # N의 최댓값은 15이기 때문에 0단계..
2022.05.18
no image
[파이썬] 소프티어 택배 마스터 광우
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트에서 문제를 확인해주세요. 나의 풀이 레일의 개수가 10 이하기 때문에 가능한 모든 레일 조합을 순열로 구한 뒤 완전 탐색으로 풀었다. import sys from itertools import permutations n, m, k = map(int, input().split()) rail_info = list(map(int, input().split())) # N이 작기 때문에 모든 경우의 수 확인 cases = list(permutations(rail_info, n)) min_sum = 1e9 # 완전 탐색 for case in cases: # 각 탐색마다 k 횟수만큼 시행 case_sum = 0 id..
2022.05.18
no image
[파이썬] 소프티어 플레이페어 암호
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트에서 문제를 확인해주세요. 나의 풀이 문제의 조건에 맞춰 충실하게 구현하면 되는 문제다. 알파벳(A~Z)을 다 쓰기 귀찮아서 ascii_uppercase를 사용하여 남은 알파벳을 계산했다. 최종적으로 암호를 생성할 때 빠르게 접근하기 위해서 알파벳 별 idx 정보를 dict에 저장했다. import sys from string import ascii_uppercase from collections import deque msg = input() key = input() # 중복 제거 및 남은 알파벳 확인 key = deque(set(key)) alpha_left = deque(set(ascii_upperc..
2022.05.18
no image
[파이썬] 소프티어 장애물 인식 프로그램
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트에서 문제를 확인해주세요. 나의 풀이 전에 풀었던 백준 2667번 단지번호 붙이기 문제와 동일한 문제다. 풀고보니 이번에 풀 때는 불필요한 global 처리도 없애고 방문 처리도 graph 하나로 가지고 진행했다. 전 풀이는 아래 링크를 통해 확인할 수 있다. 다시 보니 부끄럽다. ㅋ import sys from collections import deque def bfs(queue): num = 0 while queue: x, y = queue.popleft() num += 1 for i in range(4): x_new = x + dx[i] y_new = y + dy[i] # 방문 아직 하지 않은 점이 ..
2022.05.17
no image
[파이썬] 소프티어 8단 변속기
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트에서 문제를 확인해주세요. 나의 풀이 단순한 문제라서 풀이에 대해 말할 것은 없다. 하지만 답이 이미 [1,2,3,4,5,6,7,8] 또는 [8,7,6,5,4,3,2,1]로 주어진 상황에서 굳이 원소 별로 확인할 필요가 없었던 거 같은데 그냥 관성적으로 접근했던 거 같다. 쉬운 문제여도 더 효율적으로 풀 수 있게 좀 더 생각하면서 풀자. import sys speed = list(map(int, input().split())) asc = 0 dsc = 0 for i in range(8): if speed[i] == i + 1: continue else: break else: asc = 1 for i in ..
2022.05.17
no image
[파이썬] 소프티어 바이러스
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 시간 초과가 발생하여 결국 풀이를 참고해서 풀었다. 처음엔 바이러스가 곱해지는 비율(거듭 제곱)을 빠르게 구하기 위해서 O(logN)의 시간 복잡도를 가지는 분할 정복을 사용했다. 하지만 N의 범위가 1,000,000이라서 분할 정복 여부는 시간 초과가 관계가 없었다. 결국 큰 수 끼리 곱해지는 과정에서 시간 초과가 발생하게 되는데 큰 수를 어떻게 처리해야할 지 몰랐다. 처음 분할 정복을 시도한 풀이는 다음과 같다. import sys def get_pow(a, b): if b == 0: return 1 # b가 짝수일 경우 elif b % 2 == 0: ret..
2022.05.17
no image
[파이썬] 소프티어 금고털이
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 정렬엔 O(N)인 Count 정렬 최대 무게를 얻기 위한 idx를 찾기 위해선 O(logN)인 이진 탐색 사용 idx를 찾는 경우엔 범위가 10,000이었기 때문에 단순 탐색으로도 시간 초과가 발생하지는 않았을 것이다. 귀금속의 종류(N)이 1,000,000이므로 $O(Nlog(N))$인 파이썬의 기본 정렬 대신 $O(N)$인 Counting 정렬을 사용했다. 이때, N(귀금속 종류의 수)가 P(귀금속 무게당 가치)보다 크기 때문에 P가 같은 경우가 발생할 수 있다. P가 같은 경우엔 동일 P를 가지는 귀금속 과 구분할 수 없기 때문에 무게를 추가해줬다. 이후 ..
2022.05.17
no image
[파이썬] 소프티어 GBC
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 구간 마다 조건을 나눠서 푸는 방법도 생각해봤지만 각 위치에서의 속도 정보를 저장해서 비교했다. 이 방법이 더 편하고 실수할 일도 없을 거 같아서 선택했다. import sys n, m = map(int, input().split()) # 제한 구간 정보 section_limit = [list(map(int, input().split())) for _ in range(n)] # 테스트 구간 정보 section_test = [list(map(int, input().split())) for _ in range(m)] # 제한 구간 정보 입력 speed_limit =..
2022.05.17
no image
[파이썬] 소프티어 비밀메뉴
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 완전 탐색으로 풀었다. 코드를 다시 보니 굳이 리스트에 담아뒀다가 확인할 필요 없이 for문에서 바로 확인하는 것이 더 나았을 것 같다. 조작법 앞뒤로 다른 버튼 조작이 있어도 비밀 메뉴로 인정된다. 처음에 위 문항을 조작법 사이에 어떤 버튼이 있어도 상관 없다는 것으로 이해하고 풀었어서 시간이 좀 걸렸다. import sys # 레시피, 유저 입력, 버튼 수 secret_num, seq_num, button_num = map(int, input().split()) # 레시피 / 유저 정보 입력 secret = list(map(int, input().split(..
2022.05.16
no image
[파이썬] 소프티어 전광판
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 전광판에 해당되는 전구를 미리 dict로 지정해서 풀었다. 이때, A -> B로 바뀔 때, A에만 있는 전구는 꺼야 하고 B에만 있는 전구는 켜면 된다. import sys # 맨 위 idx를 0, 왼쪽을 1, 오른쪽을 2 아래를 3 ... 방식으로 숫자를 만들 경우 필요한 전구 미리 정의 num2lamp = { "0" : set([0, 1, 2, 4, 5, 6]), "1" : set([2, 5]), "2" : set([0, 2, 3, 4, 6]), "3" : set([0, 2, 3, 5, 6]), "4" : set([1, 2, 3, 5]), "5" : set(..
2022.05.14
no image
[파이썬] 소프티어 회의실 예약
문제 확인 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 사이트를 방문하여 문제를 확인해주세요. 나의 풀이 입출력이 까다로워서 조건에 맞게 수정하느라 시간이 꽤 걸렸다. 시간 정보 - idx 정보를 변환해가면서 풀었는데 [9, 10], [10, 11] 처럼 그냥 시간 형태로 입력에 넣었으면 더 간단하게 풀 수 있었을 것 같다. import sys # 시간 - idx 변환 hour = dict(zip(range(9, 19), range(10))) idx2hour = dict(zip(range(10), range(9, 19))) # 방/미팅 수 room_num, meeting_num = map(int, input().split()) # 방 이름 입력 room_name =..
2022.05.13