[부트캠프 2일차] 파이썬 기초부터 OOP까지

2026. 7. 3. 22:28·AI
반응형
edit_note 오늘 코테 문제
문제 공원 산책
플랫폼 프로그래머스
핵심 요구사항 이동 중 하나라도 장애물/경계 이탈이 발생하면 그 명령 전체를 무시(제자리 유지)해야 함
python
def solution(park, routes):
    current = []
    for i in range(len(park)):
        for j in range(len(park[0])):
            if park[i][j] == "S":
                current = [i, j]

    direction = "NSEW"
    dy = [-1, 1, 0, 0]
    dx = [0, 0, 1, -1]

    for route in routes:
        spl = route.split()
        d = spl[0]
        c = int(spl[1])
        idx = direction.index(d)

        ny, nx = current
        isValid = True

        for i in range(c):
            ny += dy[idx]
            nx += dx[idx]

            if (ny < 0) or (ny >= len(park)) or (nx < 0) or (nx >= len(park[0])):
                isValid = False
                break

            if park[ny][nx] == "X":
                isValid = False
                break

        if isValid:
            current = [ny, nx]
    return current
풀이 접근법
핵심은 이동을 검증하는 동안 실제 위치를 건드리면 안 된다는 점이다. 장애물이나 경계를 만나면 그 명령 전체가 무효 처리되기 때문에, 중간까지 이동한 상태가 남아있으면 안 된다. 그래서 "임시 좌표로 끝까지 시뮬레이션 → 통과했을 때만 실제 위치에 반영"하는 트랜잭션 방식으로 접근해야 한다.
1
시작 위치(S) 탐색
공원 격자를 순회하며 "S"가 있는 좌표를 찾아 시작 위치로 저장한다.
 
2
방향 문자와 이동량 매핑
명령어 문자열("N", "S", "E", "W")을 dy, dx 인덱스로 바로 변환할 수 있도록 문자열 순서와 이동 배열의 순서를 정확히 맞춘다. 세로(row) 인덱스는 아래로 갈수록 커지므로 N은 -1, S는 +1이다.
 
3
한 칸씩 시뮬레이션 + 유효성 플래그 체크 (핵심)
명령을 실제로 수행하기 전에, 임시 변수(ny, nx)에서 한 칸씩 이동해보며 공원 범위 이탈 여부와 장애물 여부를 검사한다. 둘 중 하나라도 걸리면 isValid를 False로 내리고 즉시 break한다. 이때 current는 절대 건드리지 않는다.
 
4
검증 통과 시에만 실제 위치 커밋
루프가 끝난 뒤 isValid가 살아있으면, 즉 거리(c)만큼 온전히 이동에 성공했으면 그때 비로소 current를 갱신한다. 실패했다면 current는 명령 수행 전 그대로 유지된다.
헷갈렸던 포인트
✓"갈 수 있는 만큼만 가고 멈춘다"가 아니라 "완주 못하면 아예 안 간다"이다. 루프 안에서 매 스텝마다 current를 즉시 갱신하면, 중간에 장애물을 만났을 때 이미 몇 칸 이동한 상태로 오염돼버려서 롤백이 불가능해진다.
✓이 방식 덕분에 매 명령마다 O(거리)만큼만 검사하면 되고, 별도의 롤백 로직 없이도 "전부 성공 아니면 전무" 규칙을 자연스럽게 만족시킬 수 있다.
 
menu_book 오늘 공부한 내용
학습 주제 파이썬 모듈/패키지/라이브러리 활용, 객체 지향 프로그래밍(OOP)
참고 자료 코드잇 스프린트 AI 엔지니어 부트캠프 강의자료
파이썬 기초 문법 (간단 정리)
주제 메모
if 조건문 한 줄 if문(삼항 표현식) 형태로도 작성 가능
while, for 반복문 반복문도 한 줄로 작성 가능(list comprehension 등)
함수 def로 정의, 반복되는 로직을 재사용 가능한 단위로 묶음
리스트 / 딕셔너리 / 튜플 파이썬 기본 자료구조 3종
문자열 자릿수 맞추려면 변수명:04d, 소수점 4자리는 변수명:.4f
오전에는 iOS/Swift로 익숙한 개념(조건문, 반복문, 함수, 컬렉션)을 파이썬 문법으로 다시 익히는 시간이었다.
python
# 한 줄 if문
score = 85
result = "합격" if score >= 60 else "불합격"
print(result)  # 합격

# 한 줄 for문
nums = [1, 2, 3, 4, 5]
squares = [n * n for n in nums]
print(squares)  # [1, 4, 9, 16, 25]

# 조건까지 붙인 한 줄 for문
evens = [n for n in nums if n % 2 == 0]
print(evens)  # [2, 4]
모듈 · 패키지 · 라이브러리 (간단 정리)
구분 정의 예시
모듈 파이썬 코드(.py) 하나 math, calculator.py
패키지 여러 모듈을 모아놓은 폴더 collections
표준 라이브러리 파이썬 기본 제공 os, sys, random, datetime
서드파티 라이브러리 pip으로 별도 설치 numpy, requests
random(randint/uniform), datetime(now, timedelta, strftime), 파일 입출력(open의 "w"/"a" 모드, with 구문)까지 실습으로 다뤘다. split(), strip() 같은 문자열 메서드로 텍스트 파싱하는 연습(단어장 만들기 퀴즈)도 진행.
객체 지향 프로그래밍(OOP) (간단 정리)
객체 지향 프로그래밍(OOP)은 데이터(속성)와 그 데이터를 다루는 동작(메서드)을 하나의 단위인 객체로 묶어서 관리하는 패러다임이다. 클래스는 객체를 만들기 위한 설계도, 객체(인스턴스)는 그 설계도로 실제로 찍어낸 결과물이다. 파이썬은 int·str·list·함수까지도 전부 객체로 취급된다는 점이 특징이다.
개념 설명
인스턴스 변수 객체마다 독립적으로 유지되는 속성 (self.변수)
메서드 클래스 내부에 정의된 함수, 첫 인자로 self 필요
__init__ (생성자) 객체 생성 시 자동 실행, 초기 상태 설정
__del__ (소멸자) 객체가 사라질 때 실행
__str__ print(객체) 시 보여줄 문자열 정의
__call__ 객체를 함수처럼 () 로 호출 가능하게 함
상속 기존 클래스를 물려받아 새 클래스 정의, 코드 재사용
다형성 같은 이름의 메서드가 객체 종류에 따라 다르게 동작
클래스 변수 모든 인스턴스가 공유, 클래스명.변수로 접근
정적 메서드 @staticmethod, self/cls 필요 없는 유틸리티 함수
Dog/Car/Student/Shape(Rectangle, Circle)/Counter/MathUtil 클래스를 직접 만들어보며 생성자·소멸자·상속·클래스변수·정적메서드를 각각 연습했다.
python
class Dog:
    species = "강아지"  # 클래스 변수 (모든 인스턴스가 공유)

    def __init__(self, name):
        self.name = name  # 인스턴스 변수 (객체마다 독립)

    def bark(self):
        print(f"{self.name}가 짖습니다: 멍멍!")

dog1 = Dog("바둑이")
dog2 = Dog("초코")
dog1.bark()  # 바둑이가 짖습니다: 멍멍!
print(Dog.species)  # 강아지 (클래스명.변수로 접근)

# 상속: Animal을 물려받아 Dog가 확장
class Animal:
    def greet(self):
        print("안녕하세요, 저는 동물입니다.")

class Puppy(Animal):
    def bark(self):
        print("멍멍!")

puppy = Puppy()
puppy.bark()   # 멍멍!
puppy.greet()  # 안녕하세요, 저는 동물입니다. (상속받아서 재정의 없이도 사용 가능)
기억해두고 싶은 부분
✓문자열 포매팅: 0020처럼 자릿수 맞추려면 변수명:04d, 소수점 4자리까지 표현하려면 변수명:.4f
✓표준 라이브러리 중 time은 실행 시간을 잴 때 사용한다.
✓객체는 서로 독립이다.
✓__(더블 언더스코어)는 외부 접근을 실제로 막는 쪽이고, _(싱글 언더스코어)는 관례상 "내부용"이라고 표시만 하는 것 — 강제성이 다르다.
✓상속받은 메서드는 자식 클래스에서 내가 따로 정의하지 않아도 부모 클래스에 정의된 대로 동작한다.
✓self는 파이썬이 인스턴스 메서드를 호출할 때 자동으로 첫 번째 인자에 꽂아 넣는 값이라, 함수 안에서 실제로 쓰든 안 쓰든 매개변수 자리는 반드시 있어야 한다.
✓클래스 변수를 사용할 때는 클래스명.변수 형태로 접근해야 한다.
self 동작 원리 예시 코드
python
# ani.greet() 호출은 사실 이렇게 변환됨
Animal.greet(ani)   # ani가 자동으로 첫 번째 인자로 전달

# self 있으면 정상 동작
class Animal:
    def greet(self):
        print("안녕하세요")

Animal().greet()  # OK

# self 없으면 에러
class Animal:
    def greet():
        print("안녕하세요")

Animal().greet()
# TypeError: greet() takes 0 positional arguments but 1 was given
# 받을 자리가 없는데 인스턴스가 자동으로 들어오니까 에러 나는 것

# 인스턴스가 진짜 필요 없다면 staticmethod 사용
class Animal:
    @staticmethod
    def greet():
        print("안녕하세요")

Animal().greet()  # OK, self 없이도 가능
 
psychology 오늘 들었던 생각

파이썬 내용을 한 번에 익히려다 보니 과부하가 온 것 같다. 그래도 self 관련해서 질문해서 제대로 된 답변을 받았고, 앞으로도 질문을 습관화해야겠다는 생각이 들었다.

실습 시간에 미션을 푸는데 생각이 너무 많아서 그런지 완벽하게 풀려고 했다. 그렇다 보니 시간이 좀 오래 걸린 듯했다. 알바하면서 다시 쉽게쉽게 생각하면서 풀어볼까 한다.

완벽이라는 생각을 버리자!

 
checklist 내일 할 일
  •  
    프로그래머스 문제 풀기
  •  
    부트캠프 미션 수행
  •  
    아르바이트
반응형

'AI' 카테고리의 다른 글

[부트캠프 5일차] 첫 멘토링 후기  (0) 2026.07.08
[부트캠프 3일차] 시간복잡도와 DataFrame 전처리 정리  (0) 2026.07.06
[부트캠프 1일차] 코드잇 스프린트 시작 — 데이터란 무엇인가  (1) 2026.07.02
[D-1] 코드잇 스프린트 환영회  (0) 2026.07.01
[D-2] 코테 한 문제, 그리고 잠시 숨 고르기  (0) 2026.06.30
'AI' 카테고리의 다른 글
  • [부트캠프 5일차] 첫 멘토링 후기
  • [부트캠프 3일차] 시간복잡도와 DataFrame 전처리 정리
  • [부트캠프 1일차] 코드잇 스프린트 시작 — 데이터란 무엇인가
  • [D-1] 코드잇 스프린트 환영회
Riu
Riu
안녕하세요 iOS 개발자를 꿈꾸는 Riu입니다. Github: woolnd
  • Riu
    Riu 개발노트
    Riu
  • 전체
    오늘
    어제
    • 분류 전체보기 (43) N
      • AI (15) N
      • iOS 개발 (21)
        • SwiftUI (9)
        • UIKit (6)
        • Combine (5)
        • Architecture (1)
      • 알고리즘 (1)
      • 회고록 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    AI부트캠프
    SwiftUI
    ios
    figma
    나만의todo
    SWIF
    Ai
    코드잇스프린트
    앗차!
    ios개발
    Combine
    막자알림서비스
    SWIFT
    AI엔지니어취업
    AI엔지니어
    구름톤유니브
    회고록
    cleanArchitecture
    코드잇스프린트잇
    UIKit
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Riu
[부트캠프 2일차] 파이썬 기초부터 OOP까지
상단으로

티스토리툴바