
SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 접근 방식 다른 언어는 어떨지 모르겠지만 파이썬으로는 정말 간단한 문제이다. 따라서 접근 방식이라고 할 것도 없이... 간단하게 문제를 풀 수 있었다. 너무 쉬운 문제였기 때문에 굳이 블로그에 올리지 않을까 싶었지만, 소수점 표현 때문에 올리기로 했다. 파이썬으로 소수점을 일부러 표시한 적은 없었기 때문에 소수점 표현 방법을 검색해 보아야 했다. 2. 정답 코드 파이썬에서 소수점을 표현하려면 f-string을 사용할 수 있다. T = int(input()) for test_case in range(1, T + 1): n = int(input()) data =..

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com ** 해당 문제는 Python을 지원하지 않지만, 풀어보고 싶은 문제라서 시도해 보았습니다. 1. 문제 내용 2. 접근 방식 YES 응답을 받았다면 입력된 모든 숫자를 yes라는 집합에 넣고, NO 응답을 받았다면 입력된 모든 숫자를 no라는 집합에 넣는다. 마지막에 yes 집합의 원소 중 no에도 속한 원소를 모두 제거하면, 명진이가 생각한 숫자만 남을 것이다. 3. 정답 코드 def solution(t, n): yes = set() no = set() for i in range(n): temp = list(input().split()) numbers = lis..

2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 1. 문제 내용 2. 풀이 과정 입력값의 범위에 주의 최대 입력값이 무려 십 억이다. 따라서 다음과 같이 반복문을 통해 하루하루 이동 값을 체크하는 코드로는 어림도 없다. 즉, 이 문제는 반복문으로 무작정 이동 거리를 구해서 며칠이 걸리는지 구하는 것이 아니라, 며칠이 걸리는지 계산하기 위한 수학 공식을 고민해야 한다. 공식을 고민해 보자. 하루하루 이동 거리는 a - b이고, 정상에 도착하는 날에는 뒤로 미끄러지지 않는다. 따라서 v / (a - b)가 아니라, (v - a) // (a - b)의 값에 + 1이라는 공..

2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 1. 문제 내용 2. 접근 방식 제 1, 2, 3, 4사분면으로 나뉘는 프렉탈 구조 데이터 리스트에서 0과 1이 모두 존재한다면, 해당 데이터 리스트를 4개의 사분면으로 나누어 각각 재귀 함수를 호출한다. 이때 사분면은 중간 인덱스 i를 기준으로 나누면 된다. 데이터 리스트가 0 또는 1로만 이루어져 있다면 각 개수를 세는 count 변수에 +1 한다. 3. 정답 코드 divide( ) : data의 제 quadrant사분면을 구한다...

4779번: 칸토어 집합 칸토어 집합은 0과 1사이의 실수로 이루어진 집합으로, 구간 [0, 1]에서 시작해서 각 구간을 3등분하여 가운데 구간을 반복적으로 제외하는 방식으로 만든다. 전체 집합이 유한이라고 가정하고, www.acmicpc.net 1. 문제 내용 2. 접근 방식 단계별로 풀어보기에서 '재귀' 카테고리로 들어갔었기 때문에 재귀를 활용해야 한다는 것은 알고 있었다. 그러나 팩토리얼처럼 귀여운 재귀 문제 말곤 풀어본 적이 없어서 꽤 오랜 시간 고민했다. 스트링을 3등분하고 가운데 구간을 공백(띄어쓰기)로 만드는 것은 쉽지만, 문제는 이를 어떻게 재귀 함수에 녹이냐는 것이었다! 병합 정렬에서 힌트를 얻다. 이 문제를 풀기 전에 병합 정렬 문제를 시도했다가 포기했는데, 뜻밖에도 칸토어 집합 문제에..

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 문제 내용 2. 접근 방식 7개의 정수밖에 없기 때문에 7개의 정수 중에서 3개를 골랐을 때 경우의 수가 35밖에 되지 않는다. (7C3) 따라서 모든 가능한 3개의 정수를 더하였을 때의 값을 집합에 담고 (중복 제거 목적), 이후에 리스트로 변환한 후 오름차순 정렬한다. 그럼 5번째로 큰 수는 뒤에서 5번째에 있는 원소 값일 테다. 3. 정답 코드 T = int(input()) for test_case in range(1, T + 1): data = list(map(int, input().split())) combination = set() for i in..

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 문제 내용 2. 접근 방식 마름모는 0번째 행에서 1개, 1번째 행에서 3개, 2번째 행에서 5개...로 늘다가, 농장 크기의 딱 절반이 되는 행 이후부터는 다시 5 > 3 > 1로 감소한다. 따라서 left, right로 행 안에서 마름모에 해당하는 열의 범위를 표현하고, 행이 거듭될수록 left, right 를 양옆으로 한 칸씩 넓히다가 딱 절반째 행부터는 left, right 값을 한 칸씩 줄인다. 3. 정답 코드 def init() : n = int(input()) data = [] for i in range(n) : data.append(input(..
교재에 서술된 정답 코드가 아닌, 제가 직접 작성한 코드입니다. solution 함수를 구현하여 입력문 생략 게임 캐릭터의 방향과 방문지 출력 등의 테스트 코드 포함 책에 있는 코드와의 차이점 turn_left() 함수 미사용 방문한 위치를 저장하기 위한 맵 미사용 (메모리 효율적) def solution(n, m, x, y, d, maps) : steps = [ [-1, 0], [0, 1], [1, 0], [0, -1] ] # index is the direction 0, 1, 2, 3 count = 1 maps[x][y] = -1 # if visited, change value to -1 limit = 4 print(f'*** visited: {[x, y]} ***') while True : d = ..

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 문제 내용 2. 접근 방식 비밀번호의 양쪽 끝이 0일 수 있으므로 문자열로 처리한다. (int 변환 시 맨 앞과 맨 뒤 0이 사라지기 때문) 더 이상 소거할 번호 쌍이 없을 때까지 비밀번호를 처음부터 끝까지 검사하면서 번호 쌍 제거 행위를 계속 반복한다. 더 이상 소거할 번호 쌍이 없는 것을 판단하기 위해 count 변수를 사용하여 비밀번호 내 번호 쌍 개수를 세었고, count == 0일 시 번호 쌍 검사의 반복을 종료한다. 3. 정답 코드 T = 10 for test_case in range(1, T + 1): n, password = input().sp..

SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 문제 내용 2. 접근 방식 자료구조: List VS deque 입력받은 명령어는 왼쪽에서부터 값을 꺼내 활용할 테니, 시간 복잡도가 O(1)인 popleft()를 사용하기 위해 deque 구조를 사용할까 고민하였다. 그러나 D (삭제)를 슬라이싱으로 처리할 계획이었기 때문에 리스트를 선택하였다. (deque는 슬라이싱이 불가능하다) 문제가 조금 불친절했다. x의 위치라는 것이 1) x라는 값의 인덱스인지 2) index가 x인지 불명확하다고 생각했다. 그래도 이것은 주어진 테스트 케이스를 탐색하며 2)의 의미라는 것을 알 수 있었다. 그러나 테스트 케이스가 ..