본문 바로가기
✨ Club/EDOC 프로그래밍 동아리 | Algorithm

EDOC 1-2 1회차

by 정람지 2022. 9. 14.

EDOC OT (2).pptx
8.74MB

<프로그래머스 - 체육복>

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

그리디 알고리즘 문제다!

 

맨 처음에 생각 없이 짰다가

 

앞뒤친구들에게 다 빌릴 수 있는 친구와 한명에게밖에 못 빌리는 친구와는 차등을 두어서 가장 많은 학생들이 체육복을 가져갈 수 있게해야 한다는 사실을 간과했다는 걸 깨달았다.

 

+도난당한 사람이 여벌을 가질 수도 있다는 걸 놓쳐서 수정

def solution(n, lost, reserve):
    checklist= [ 0 for _ in range(n)] #전체 학생 수 만큼의 빈칸
    result = n - len(lost) #현재 체육복 있는 사람

    for cha in lost:
        if cha + 1 in reserve:
            checklist[cha-1] += 1 # 이 번호의 친구의 체육복 빌릴 수 있는 가능성 +1
        if cha - 1 in reserve:
            checklist[cha-1] += 1 # +2
        if cha  in reserve:
            checklist[cha-1] += 1 # +2

    #빌릴 가능성 높이기
    for i in range(n):
        if checklist[i] == 1: # 1일 때 (번호는 i+1인 상태)
            if i+2 in reserve:
                result += 1
                reserve.remove(i+2)
            elif i in reserve:
                result += 1
                reserve.remove(i)
            elif i+1 in reserve:
                result += 1
                reserve.remove(i+1)
        elif checklist[i] == 2: #2일 때
            if i+2 in reserve:
                result += 1
                reserve.remove(i+2)
            elif i in reserve:
                result += 1
                reserve.remove(i)
            elif i+1 in reserve:
                result += 1
                reserve.remove(i+1)
        elif checklist[i] == 3: #3일 때
            if i+2 in reserve:
                result += 1
                reserve.remove(i+2)
            elif i in reserve:
                result += 1
                reserve.remove(i)
            elif i+1 in reserve:
                result += 1
                reserve.remove(i+1)
            
    return result

안 된다...! 

 

-다른 학생에게는 체육복을 빌려줄 수 없습니다.

!! 이런..

def solution(n, lost, reserve):
    checklist= [ 0 for _ in range(n)] #전체 학생 수 만큼의 빈칸
    result = n - len(lost) #현재 체육복 있는 사람

    for cha in lost:  # 자기가 체육복 안 가져온 경우
        if cha in reserve:
            result += 1
            reserve.remove(cha)
            lost.remove(cha)
            
    for cha in lost:
        if cha + 1 in reserve:
            checklist[cha-1] += 1 # 이 번호의 친구의 체육복 빌릴 수 있는 가능성 +1
        if cha - 1 in reserve:
            checklist[cha-1] += 1 # +2

    #빌릴 가능성 높이기
    for i in range(n):
        if checklist[i] == 1: # 1일 때 (번호는 i+1인 상태)
            if i+2 in reserve:
                result += 1
                reserve.remove(i+2)
            elif i in reserve:
                result += 1
                reserve.remove(i)

        elif checklist[i] == 2: #2일 때
            if i+2 in reserve:
                result += 1
                reserve.remove(i+2)
            elif i in reserve:
                result += 1
                reserve.remove(i)
            
    return result

안 된다..

 

[Python] 프로그래머스 - 체육복

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

rain-bow.tistory.com

오 간결한 방법..이건 다 통과된다..

정렬해서 작은 순서대로 보니까 왼쪽 먼저 있는지만 보고 있으면 무조건 주는 방식이 통하는구나..

 

그래서 내 건 왜 안 되지?

dchecklist= [ 0 for _ in range(n)] #전체 학생 수 만큼의 빈칸
    result = n - len(lost) #현재 체육복 있는 사람

    for cha in lost:  # 자기가 체육복 안 가져온 경우
        if cha in reserve:
            result += 1
            reserve.remove(cha)
            lost.remove(cha)
            
    for cha in lost:
        if cha + 1 in reserve:
            checklist[cha-1] += 1 # 이 번호의 친구의 체육복 빌릴 수 있는 가능성 +1
        if cha - 1 in reserve:
            checklist[cha-1] += 1 # +2

    #빌릴 가능성 높이기
    for i in range(n):
        if checklist[i] >= 1: # (번호는 i+1인 상태)
            if i in reserve:
                result += 1
                reserve.remove(i)
            elif i+2 in reserve:
                result += 1
                reserve.remove(i+2)
            
    return result

하나 안 된다 하나! 7번!

def solution(n, lost, reserve):
    checklist= [ 0 for _ in range(n)] #전체 학생 수 만큼의 빈칸

     # 자기가 체육복 안 가져온 경우
    reserve_del = set(reserve)-set(lost) 
    lost_del = set(lost)-set(reserve) 

    result = n - len(lost_del) #현재 체육복 있는 사람
            
    for cha in lost_del:
        if cha + 1 in reserve_del:
            checklist[cha-1] += 1 # 이 번호의 친구의 체육복 빌릴 수 있는 가능성 +1
        if cha - 1 in reserve_del:
            checklist[cha-1] += 1 # +2

    #빌릴 가능성 높이기
    for i in range(n):
        if checklist[i] >= 1: # (번호는 i+1인 상태)
            if i in reserve_del:
                result += 1
                reserve_del.remove(i)
            elif i+2 in reserve_del:
                result += 1
                reserve_del.remove(i+2)
            
    return result

set을 이용한 코드 - 자신의 코드와 기능이 똑같은 것 같은- 로 바꿨더니 돌아갔다는 포스팅이 있어서 바꿨는데

얘는 테스크케이스 7이 먹힌다

성공... 

대체.. 왜지..?

어디가 다른 걸까????

 

안 되는 테스트케이스 뭔지 공개하면 안 되나!??!? 화나네.. 휴...

 

그리고 이건 함수로 짜는 거라서 찍어보려면 밑에 함수 실행하는 거랑 값 넣어야 한다..

프로그래머스 문제는 다 이런 건가?


깃 사용하기

 

[Github] 터미널에서 GitHub Repository 연동 사용 방법: git remote, push

요즘은 IDE 자체에서 Git 을 사용할 수 있도록 지원해주는 경우가 많다. 하지만 개인적으로는 터미널에서 git을 사용하면 개발환경과 무관하게 모든 곳에서 공통적으로 사용할 수 있어서 가급적

curryyou.tistory.com

fatal: Not a valid object name: 'master'.

 

[Git] fatal: Not a valid object name: 'master'. 해결방법

Git Flow에 대해서 실습을 해보던 중 GitHub에 새로 만든 비어있는 repository를 컴퓨터로 git clone 명령어를 통해 clone해와서 branch를 생성하려고 하니 다음과 같은 오류를 얻었습니다. $ git branch develop..

somjang.tistory.com

 

github password, username 입력 자동화하기

.

medium.com

그냥 깃 자체에서 글을 올렸다

아빠가 도와좃따

 

이제 터미널로 하지 말고...

VSCode 깃 플러그인 설치해서 사용하기!

 

Visual Studio Code(VS Code) 설치방법 및 내가 쓰는 확장 플러그인

VS Code Visual Studio Code 일전에  'VS Code 유용한 단축키 사용방법'을 포스팅하면서 다음에 VS Code 유용한 확장 플러그인 포스팅도 하겠다고 약속했는데 드디어 글을 쓰게 되었습니다. 이번 포스팅은 V

www.biew.co.kr

 

'✨ Club > EDOC 프로그래밍 동아리 | Algorithm' 카테고리의 다른 글

✳️ 𝙴𝙳𝙾𝙲 ✳️ 2023 - 2학기 + 회장  (2) 2023.05.31
EDOC 1-2 2회차  (1) 2022.09.21
Edoc 엠티 팀대항 코딩  (0) 2022.08.24
EDOC 2022.08 3주차  (0) 2022.08.16
EDOC 2022.08 2주차  (0) 2022.08.09