4. 체육복

2020. 9. 9. 16:17·알고리즘_코딩테스트/프로그래머스_Level1

0. 문제

링크) https://programmers.co.kr/learn/courses/30/lessons/42862

 

코딩테스트 연습 - 체육복

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번�

programmers.co.kr

1. 알고리즘 계획

  1. 모든 학생이 체육복을 가지고 있다고 가정하고 배열 생성
  2. 체육복을 잃어버린 학생들의 번호를 찾아 체육복(값)을 뺀다
  3. 체육복이 없는 학생의 경우 앞, 뒤를 확인해 체육복(값)을 전달받는다


2. 나의 코드

def solution(n, lost, reserve):
    s = [1 for _ in range(0, n)]
    for r in reserve:
        s[r-1] += 1
    for l in lost:
        s[l-1] -=1
    for i, v in enumerate(s):
        if v != 0:
            continue
        else:
            if s[i-1:i] == [2]:
                s[i-1],s[i] = 1, 1
                continue
            elif s[i+1:i+2] == [2]:
                s[i+1], s[i] = 1, 1
                continue
    return s.count(1) + s.count(2)

- enumerate를 사용

- '리스트 슬라이싱'을 통해 for문을 돌게되면 'list index out of bounds' 문제를 벗어날 수 있다. 


3. 다른 사람의 코드

def solution2(n, lost, reserve):
    _reserve = [r for r in reserve if r not in lost]
    _lost = [l for l in lost if l not in reserve]
    for r in _reserve: # 여유가 있는 애들 중
        f = r - 1 # front
        b = r + 1 # back
        if f in _lost:
            _lost.remove(f) # 앞쪽의 여유가 없는 애들
        elif b in _lost:
            _lost.remove(b) # 뒤쪽의 여유가 없는 애들
    return n - len(_lost)

- '리스트 컴프리핸션'을 사용해서 리스트를 생성

- '여유가 있는 학생들'의 리스트(_reserve)를 돌면서, 앞과 뒤에 '여유가 없는 학생들'을 확인하고, (_lost)리스트에서 뺀다.

('여유가 있는 학생'이 '여유가 없는 학생'에게 줬다고 가정) 

# 그런데 이 경우 양 옆으로 여유가 없는 학생들이 둘 다 있다면 오류가 생기지 않나?


4. 정리 및 리뷰

- for문을 돌 때 '리스트 슬라이싱'을 활용할 수 있는 방법을 배웠다. 

코드 만족도: ★★★★☆


'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글

6. 2016년  (0) 2020.09.09
5. K번째 수  (0) 2020.09.09
3. 모의고사  (0) 2020.09.09
2. 완주하지 못한 선수  (0) 2020.09.09
1. 크레인 인형뽑기 게임  (0) 2020.09.09
'알고리즘_코딩테스트/프로그래머스_Level1' 카테고리의 다른 글
  • 6. 2016년
  • 5. K번째 수
  • 3. 모의고사
  • 2. 완주하지 못한 선수
논곰
논곰
현재 2년 유목하고, 3년 이상 리테일 쪽에서 머신러닝 엔지니어로 잠시 정착 중인 AI 엔지니어입니다.
  • 논곰
    에이아이 유목민
    논곰
  • 전체
    오늘
    어제
    • 분류 전체보기 (200)
      • 기술 견문록 (22)
        • MLOps (8)
        • ProductServing (5)
        • 협업 툴 (3)
        • Error Collecting (2)
        • 컨퍼런스 (1)
        • 자격증 (1)
      • IT 견문록 (10)
        • 추가 학습 정리 (10)
      • 알고리즘_코딩테스트 (162)
        • 프로그래머스_Level1 (40)
        • 백준코딩테스트_단계별문제풀이 (14)
        • 이것이 코딩테스트다 (63)
        • 2021_알고리즘 스터디 (30일) (28)
        • 주간코딩 스터디 (주코스) (17)
      • 독서 견문록 (6)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    글또
    부스트캠프_AITech3기
    그리디
    부스트캠프_AITech_3기
    파이썬 3
    U_stage
    구현
    이코테
    dp
    다시보기
    dfs
    그래프이론
    정렬
    단계별문제풀이
    알고리즘_스터디
    ODQA
    Level2
    python3
    MLFlow
    주간회고
    백준
    백트랙킹
    Level2_PStage
    기술면접
    최단경로
    Level1
    이진탐색
    알고리즘스터디
    프로그래머스
    mrc
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
논곰
4. 체육복
상단으로

티스토리툴바