[SWEA/Python] 로컬 테스트 환경 구축 및 D2 핵심 알고리즘 정복 🚀

이성진·2026년 5월 1일

SSAFY 입과를 목표로 본격적인 SWEA 알고리즘 공부를 시작했다. 백준이나 프로그래머스와 달리, SWEA는 테스트 케이스를 직접 핸들링해야 하는 고유의 환경이 있다. 무작정 웹 에디터에서 코드를 짜기보다, 로컬에 나만의 최적화된 테스트 환경을 먼저 구축하고 D2 난이도의 핵심 문제들을 평소 내가 추구하는 설계 주도형 사고(SOP)를 기반으로 풀어내 보았다.


1. 시간 단축을 위한 로컬 I/O 자동화 세팅 (input.txt)

매번 수십 줄의 예제 입력을 웹 콘솔에 복사/붙여넣기 하는 것은 심각한 시간 낭비다. 파이썬의 sys 모듈을 활용하여 완벽한 로컬 테스트 환경을 구축했다.

import sys
# input.txt에 예제 데이터를 넣고 코드를 실행하면 0.1초 만에 테스트 완료
sys.stdin = open("input.txt", "r") 

VS Code에 SWEA_Practice라는 작업 폴더를 만들고 위 코드를 템플릿화했다. 이제 디버깅과 자동완성을 100% 활용하며, 오직 '최적의 로직 설계'에만 집중할 수 있게 되었다. (단, SWEA에 최종 제출할 때는 반드시 저 두 줄을 지우거나 주석 처리해야 한다!)


2. 단순 Pass를 넘어, 로직 최적화 설계하기 (D2 핵심 유형)

단순히 문제를 푸는 것을 넘어, '이게 최선의 방식인가?'를 끊임없이 고민하며 D2의 주요 알고리즘을 뚫어냈다.

📌 Simulation: 이중 for문의 레일을 탈출하기 (1954. 달팽이 숫자)

  • 기존의 늪: 이중 for문의 자동 진행(오름차순)에 갇히면, 달팽이처럼 벽에 부딪혀 우->하->좌->상으로 방향을 꺾는 로직을 구현할 수 없다.
  • 최적화 설계 (SOP): 과감하게 이중 for문을 버리고 1차원 for문으로 전환했다. dx = [0, 1, 0, -1], dy = [1, 0, -1, 0] 방향 배열을 선언하고, 다음 방문할 좌표(nx, ny)를 미리 계산했다. 격자를 벗어나거나 이미 방문한 숫자라면 direction = (direction + 1) % 4로 방향을 90도 트는 '수동 조종' 방식을 구현했다. 복잡한 2차원 배열 상태 갱신을 다루는 완벽한 기초 훈련이었다.

📌 Greedy: 시간의 흐름을 뒤집는 사고 (1859. 백만 장자 프로젝트)

  • 기존의 늪: 1일 차부터 "지금 살까? 말까?"를 고민하며 현재와 미래의 모든 가격을 비교하면, 이중 순회로 인해 O(N2)O(N^2)의 시간 복잡도가 발생하여 100만 개의 데이터에서 무조건 Time Out이 발생한다.
  • 최적화 설계 (SOP): 발상을 전환하여 파이썬의 꽃인 역순 슬라이싱 [::-1]을 활용했다. 미래(배열의 맨 끝)에서부터 과거로 거슬러 올라가며 max_price를 갱신해 나갔다. 이 설계를 통해 단 한 번의 순회, 즉 O(N)O(N)의 시간 복잡도로 최고가에 주식을 파는 로직을 완성했다.

📌 Array & String: 범위 최적화와 내장 함수 (2001. 파리퇴치 / 1989. 회문검사)

  • 2001. 파리 퇴치: 파리채가 격자 밖으로 나가는지 매번 if문으로 검사하는 대신, 애초에 탐색 범위를 range(N - M + 1)로 한정하여 오버플로우를 원천 차단하는 깔끔한 설계를 적용했다.
  • 1989. 초심자의 회문 검사: C나 Java처럼 배열 양끝을 반복문으로 투 포인터 탐색하는 대신, word == word[::-1] 단 한 줄로 코드를 끝내며 파이썬의 강력한 내장 기능을 100% 활용했다.

💡 오늘의 회고

단순히 '정답이 떴다'에 만족하지 않고, "이게 정말 최선의 설계인가?"를 집요하게 파고든 하루였다. 특히 백만 장자 프로젝트에서 뒤에서부터 배열을 탐색하며 시간 복잡도를 O(N)O(N)으로 줄여냈을 때의 쾌감은 이루 말할 수 없다.

성공적으로 로컬 환경을 세팅하고 설계 주도형 사고의 기본기까지 완벽하게 장착했으니, 다음은 드디어 대망의 D3 시그니처 문제 'View'에 도전할 차례다. SSAFY를 향해 멈추지 않고 가보자! 🔥

profile
알고리즘과 cs지식 학습

0개의 댓글