이 영역을 누르면 첫 페이지로 이동
쿄코코 블로그의 첫 페이지로 이동

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

백준 19941(햄버거 분배 ) - Python(파이썬) - 그리디

  • 2022.06.03 20:28
  • [백준] Python,Java로 풀기📖/그리디
    반응형
     

    19941번: 햄버거 분배

    기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사

    www.acmicpc.net

    예제 설명

    20 1
    HHPHPPHHPPHPPPHPHPHP
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    H H P H P P H H P P H P P P H P H P H P

      1. 2번의 사람 -> 1번 or 3번의 햄버거를 먹을 수 있지만 무조건 앞에 남은 햄버거 먹기 -> visted[1] =T 

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F F F F F F F F F F F F F F F F F F

     2. 4번의 사람 -> 3번의 햄버거 먹음 -> visted[3] = T

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F F F F F F F F F F F F F F F

    3. 5번의 사람 -> 6번의 햄버거 먹음 -> visted[6]=T

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F T F F F F F F F F F F F F F

    4. 8번의 사람 -> 7번의 햄버거 먹음 -> visted[7] =T

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F T T F F F F F F F F F F F F

    5. 9번의 사람 -> 10번의 햄버거 먹음 -> visted[10]=T

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F T T F F T F F F F F F F F F

    6. 13번의 사람 -> 14번 햄버거 먹음 -> visted[14]=T

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F T T F F T F F F T F F F F F

    7. 15번의 사람 -> 16번의 햄버거 먹음 -> visted[16]=T

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F T T F F T F F F T F T F F F

    8. 17번의 사람 -> 18번의 햄버거 먹음 -> visted[17]=T

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F T T F F T F F F T F T F T F

    따라서 총 먹은 햄버거의 개수는 T의 개수로 8개이다.

    visted ( 먹었는지 안 먹었는지 알려주는 배열 )
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
    F T F T F F T T F F T F F F T F T F T F
    문제 해설
    ① n(식탁의 길이),k(햄버거를 선택할 수 있는 거리), array(사람과 햄버거의 위치 입력받는 함수) 받아들이기 ,visted(햄버거를 먹었는지 안 먹었는지 알려주는 배열 ) 선언
    ② 사람(P)일 경우 사람의 위치- k, 사람의 위치+k까지 for루프 돌리기
    ③ 루프 돌릴 때 사람의 위치 -k, 사람의 위치+k의 값이 0과 n 사이의 경우 햄버거를 안 먹었을 경우 visted의 값을 True로 변경하면서 count값을 1씩 더하기

    Python(파이썬) 

    import sys
    #식탁의 길이,햄버거를 선택할 수 있는 거리 입력받기
    n,k = map(int,sys.stdin.readline().split())
    #햄버거와 사람의 위치 그래프
    array = sys.stdin.readline()
    #햄버거를 먹었는지 안 먹었는지 배열
    visted=[False]*n
    #햄버거 먹을 수 있는 최대 사람 수
    count=0
    for i in range(n):
    	#사람의 경우
        if array[i]=='P':
        	#i에서 K까지의 거리에 있는 햄버거의 경우
            for j in range(i-k,i+k+1):
            	#인덱스 안에 있게
                if j>=0 and j<n:
                	#햄버거를 안 먹었을 경우
                    if not visted[j] and array[j]=='H':
                    	#햄버거를 먹었다고 표시
                        visted[j]=True
                        #햄버거를 먹을 수 있는 사람수 +1
                        count+=1
                        break
    
    print(count)
    import sys
    #식탁의 길이,햄버거를 선택할 수 있는 거리 입력받기
    n,k = map(int,sys.stdin.readline().split())
    #햄버거와 사람의 위치 그래프
    array = sys.stdin.readline()
    #햄버거를 먹었는지 안 먹었는지 배열
    #False말고 F라고 초기화
    visted=['F']*n
    for i in range(n):
    	#사람의 경우
        if array[i]=='P':
        	#i에서 K까지의 거리에 있는 햄버거의 경우
            for j in range(i-k,i+k+1):
            	#인덱스 안에 있게
                if j>=0 and j<n:
                	#햄버거를 안 먹었을 경우
                    if visted[j]=='F' and array[j]=='H':
                    	#햄버거를 먹었다고 표시
                        visted[j]='T'
                        break
    
    print(visted.count('T'))
    반응형

    '[백준] Python,Java로 풀기📖 > 그리디' 카테고리의 다른 글

    백준 17451(평행 우주) - Python(파이썬) - 그리디 알고리즘  (0) 2022.06.26
    백준 11000(강의실 배정) - Python(파이썬) - 그리디,정렬(heap, lambda,Comparator)  (0) 2022.06.08
    백준 2864(5와 6의 차이) - Python(파이썬)  (0) 2022.05.17
    백준- 11399( ATM )- Python(파이썬)  (0) 2022.05.11

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • 백준 17451(평행 우주) - Python(파이썬) - 그리디 알고리즘

      백준 17451(평행 우주) - Python(파이썬) - 그리디 알고리즘

      2022.06.26
    • 백준 11000(강의실 배정) - Python(파이썬) - 그리디,정렬(heap, lambda,Comparator)

      백준 11000(강의실 배정) - Python(파이썬) - 그리디,정렬(heap, lambda,Comparator)

      2022.06.08
    • 백준 2864(5와 6의 차이) - Python(파이썬)

      백준 2864(5와 6의 차이) - Python(파이썬)

      2022.05.17
    • 백준- 11399( ATM )- Python(파이썬)

      백준- 11399( ATM )- Python(파이썬)

      2022.05.11
    다른 글 더 둘러보기

    정보

    쿄코코 블로그의 첫 페이지로 이동

    쿄코코

    • 쿄코코의 첫 페이지로 이동

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (168)
      • Python (24)
        • 😈 99클럽 코테 스터디 4기 TIL (23)
        • 궁금한거 정리 (1)
      • SQL (16)
        • HackerRank (15)
      • [백준] Python,Java로 풀기📖 (71)
        • 정렬(Sorting) (6)
        • 그리디 (5)
        • 문자열 (7)
        • 수학 (3)
        • DFS&BFS (10)
        • 구현 (4)
        • 다이나믹 (17)
        • 이분탐색 (1)
        • 자료구조 (10)
        • 최단거리 (5)
        • 인덱스트리 (0)
      • [프로그래머스]Python,Java로 풀기 (6)
        • Level 1 (4)
        • Level 2 (2)
      • Study Platform📚 (25)
        • (운영체제) - 블로그 및 강의 참고 (0)
        • 김영한👨🏻‍🏫의 스프링 부트와 JPA 실무 완전 .. (5)
        • (알고리즘)- [이코테] 이것이 코딩테스트다 정리 (10)
        • 그림으로 배우는 Http&Network Basic (10)
      • 까먹을까봐 적는 것들 (4)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 백준
    • 99클럽
    • 프로그래머스
    • 오블완
    • TiL
    • 티스토리챌린지
    • 항해99
    • 코딩테스트준비

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. © 쿄코코. Designed by Fraccino.

    티스토리툴바