[D-2] 코테 한 문제, 그리고 잠시 숨 고르기

2026. 6. 30. 17:59·AI
반응형
edit_note 오늘 코테 문제
문제바탕화면 정리 (Lv.1)
플랫폼프로그래머스
난이도Lv. 1
핵심 요구사항모든 '#'을 포함하는 가장 작은 직사각형의 좌상단·우하단 좌표 구하기
내가 작성한 코드
python
def solution(wallpaper):
    min_val = float('inf')
    max_val = float('-inf')

    position = []
    lux = min_val
    luy = min_val
    rdx = max_val
    rdy = max_val

    for row, line in enumerate(wallpaper):
        for col, char in enumerate(line):
            if char == '#':
                position.append((row, col))

    for (row, col) in position:
        lux = min(lux, row)
        luy = min(luy, col)
        rdx = max(rdx, row)
        rdy = max(rdy, col)

    return (lux, luy, rdx+1, rdy+1)
풀이 접근법
핵심은 파일 칸의 "인덱스"와 드래그 좌표인 "격자점"이 한 칸 어긋나 있다는 점이다. 칸 인덱스 기준으로 min/max를 구한 뒤, 오른쪽 아래 경계만 +1 해주면 칸 전체를 포함하는 직사각형이 된다.
1
파일 위치 전부 찾기
이중 for문(enumerate)으로 wallpaper를 순회하면서 '#'인 칸의 (row, col)을 모두 모은다.
python
for row, line in enumerate(wallpaper):
    for col, char in enumerate(line):
        if char == '#':
            position.append((row, col))
2
좌표별 min/max 구하기
모은 위치들을 순회하면서 최솟값과 최댓값을 갱신한다. 초기값은 float('inf') / float('-inf')로 잡아, 어떤 좌표와 비교해도 무조건 갱신되도록 했다.
python
for (row, col) in position:
    lux = min(lux, row)
    luy = min(luy, col)
    rdx = max(rdx, row)
    rdy = max(rdy, col)
3
오른쪽 아래 좌표만 +1 보정
칸 인덱스 자체는 격자점이 아니라 "칸의 시작 위치"이기 때문에, 그 칸까지 완전히 덮으려면 오른쪽·아래쪽 경계 좌표에 1을 더해야 한다.
python
return (lux, luy, rdx + 1, rdy + 1)
"경계값을 그대로 쓸지 +1 할지"를 헷갈리지 않는 게 이런 좌표/경계 변환 문제의 핵심 포인트였다 — 어제 풀었던 날짜 비교 문제의 today_days >= days 처리와 비슷한 맥락.
고도화
튜플 리스트에 (row, col)을 같이 담고 나중에 다시 풀어서(unpack) min/max를 구하는 대신, 처음부터 row 모음과 col 모음을 분리된 두 리스트로 저장했다. 그러면 파이썬 내장 min()/max()를 리스트 전체에 바로 적용할 수 있어서, 갱신용 두 번째 for문이 통째로 사라진다.
✦ 고도화된 코드
python
def solution(wall):
    a, b = [], []
    for i in range(len(wall)):
        for j in range(len(wall[i])):
            if wall[i][j] == "#":
                a.append(i)
                b.append(j)
    return [min(a), min(b), max(a) + 1, max(b) + 1]
고도화 포인트
1. row/col을 따로 저장 — a(row 모음), b(col 모음) 두 리스트로 분리해 min(a), max(a)처럼 내장 함수를 바로 적용할 수 있게 됐다.
2. inf/−inf 초기화 제거 — 한 칸씩 비교하며 갱신하는 대신, 리스트를 다 채운 후 min()/max()를 한 번에 호출한다.
3. enumerate 대신 range(len()) — 이건 사실 약간 후퇴한 부분이다. enumerate가 더 파이썬스럽고 가독성이 좋은데 바뀌었다.
4. 코드 길이 단축 — 변수 수(position, lux, luy, rdx, rdy → a, b)와 루프 수(2개 → 1개)가 줄어 라인 수가 거의 절반이 됐다. 다만 a, b로 축약되면서 가독성은 떨어졌다 — row/col처럼 의미가 드러나는 이름이 유지보수 측면에선 더 낫다.
핵심 인사이트
✓핵심 로직(격자점 변환을 위한 +1)은 그대로고, "튜플 리스트 + 두 번째 순회"를 "분리된 두 리스트 + 내장 min/max"로 바꿔서 코드를 단축한 게 고도화의 본질이다.
✓짧은 코드가 항상 좋은 코드는 아니다 — enumerate→range, 의미 있는 변수명→a/b처럼 가독성을 희생하는 트레이드오프도 있다.
한 줄 회고인덱스와 격자점의 차이 — "어디서 +1을 해야 하는가"를 정확히 짚어내는 게 이런 류 문제의 핵심이었다
psychology 오늘 들었던 생각

오늘은 코테 한 문제만 풀고 쉬었다. 쉬는 김에 MBC 예능 놀러코스터를 봤는데, 노홍철·최강록·빠니보틀·고경표가 나와서 전 세계 놀이공원을 돌아다니는 내용이었다. 하고 싶은 걸 하며 사는 모습이 정말 멋있어 보였는데, 동시에 그게 가능한 이유는 결국 각자 자기 일을 열심히 해왔기 때문이라는 생각이 들었다. 내일 오티를 시작으로 7개월간의 부트캠프가 본격적으로 시작된다. 나도 개발자로 취업하고 싶다는 목표를 위해 이 7개월을 버텨내면서, 언젠가 나만의 방식으로 하고 싶은 걸 하며 사는 삶을 만들어보고 싶다.

rate_review 마무리
코테 한 문제로 가볍게 마무리한 휴식일. 내일부터 시작되는 7개월을 위해 잠시 숨을 고른 하루.
checklist 내일 할 일
  • 코드잇 스프린트 오리엔테이션 참여
반응형

'AI' 카테고리의 다른 글

[부트캠프 1일차] 코드잇 스프린트 시작 — 데이터란 무엇인가  (1) 2026.07.02
[D-1] 코드잇 스프린트 환영회  (0) 2026.07.01
[D-3] 시각화 도구 3종 비교  (0) 2026.06.29
[D-4] seaborn으로 상관관계 보기  (0) 2026.06.28
[D-5] 통계 기초 완주 — 박스 플롯부터 누적값까지  (0) 2026.06.27
'AI' 카테고리의 다른 글
  • [부트캠프 1일차] 코드잇 스프린트 시작 — 데이터란 무엇인가
  • [D-1] 코드잇 스프린트 환영회
  • [D-3] 시각화 도구 3종 비교
  • [D-4] seaborn으로 상관관계 보기
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
  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Riu
[D-2] 코테 한 문제, 그리고 잠시 숨 고르기
상단으로

티스토리툴바