코테/프로그래머스

[프로그래머스 PCCP] Lv1 1번 붕대감기

2023. 11. 27. 09:39
목차
  1. 문제 설명
  2. 알고리즘
  3. 해결 방법

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/250137

 

프로그래머스

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

programmers.co.kr

 

이거 풀어봤던 문제인데 간신히 풀었다.. 

 

알고리즘

우선순위 큐를 이용해서 풀었다. 우선순위 큐 정렬 조건을 attack 의 attack[0]을 기준으로 시간이 빠른 순으로 정렬한 뒤 담아두고 공격을 하는거다.

 

시간은 0초 부터 전위 연산자를 사용해서 항상 카운팅이 되게했고 우선순위 큐에서 가장 앞에 있는 값(시간이 빠른 공격 값)이 될때 까지 붕대감기 기술을 시전하는 시간 cnt를 후위 연산자로 카운팅을 했다. 그 cnt 값이 연속 성공한 시전시간 즉, bandage[0]이 같아지면 초당 회복되는것(bandage[1]) 값에 추가로 보너스 회복값(bandage[2])을 받는다. 그러나 항상 maxHealth이 있어서 계속 회복값이  커지는 것은 아닌점에서 Math.min값을 이용했다. 그리고 나서 가장 앞에있는 시간이 되면 health를 공격당한 것으로 바꿔주고 cnt도 0으로 reset을 시켜준다. 이때 while 문에서도 health 자체가 0이하가 되면 -1을 return하도록 밑에 써놨는데 생각해보니까 앞에 놔두는 게 더 좋지 않을까 싶다.

 

나는 왜이렇게 우선순위 큐밖에 생각이 안날까? 그냥 뽑으면 되서 쉽게 와닿는것 같다..

 

해결 방법

public int solution(int[] bandage, int health, int[][] attacks) {
    int time = 0;
    int maxHealth = health;

    Arrays.sort(attacks, (o1, o2) -> o1[0] - o2[0]);
    Queue<int[]> queue = new LinkedList<>();

    for (int[] attack : attacks) {
      queue.offer(attack);
    }

    int cnt = 0;
    while (!queue.isEmpty()) {
      while(++time < queue.peek()[0]) {
        cnt++;
        if (health < maxHealth && cnt < bandage[0]) {
          health = Math.min(maxHealth, health + bandage[1]);
        } else if (cnt == bandage[0]) {
          health = Math.min(maxHealth, health + bandage[1] + bandage[2]);
          cnt = 0;
        }
      }
      int[] curAttack = queue.poll();
      health -= curAttack[1];
      cnt = 0;
      if (health <= 0) {
        return - 1;
      }
    }

    return health;
  }

 

 

반응형

'코테 > 프로그래머스' 카테고리의 다른 글

[프로그래머스 PCCP] Lv1 9번 이웃한 칸  (0) 2023.11.27
[프로그래머스 PCCP] Lv1 10번 데이터 분석  (1) 2023.11.27
[프로그래머스 Lv3] 여행경로  (0) 2023.11.24
[프로그래머스 Lv2] 순위 검색  (0) 2023.11.23
[프로그래머스 Lv2] 행렬 테두리 회전하기  (1) 2023.11.22
  1. 문제 설명
  2. 알고리즘
  3. 해결 방법
'코테/프로그래머스' 카테고리의 다른 글
  • [프로그래머스 PCCP] Lv1 9번 이웃한 칸
  • [프로그래머스 PCCP] Lv1 10번 데이터 분석
  • [프로그래머스 Lv3] 여행경로
  • [프로그래머스 Lv2] 순위 검색
three von
three von
어려워 보이는 프로그래밍 언어를 쉽게 정복하는 블로그
반응형
three von
LangEASY : 프로그래밍 언어를 쉽게 정복하는 공간
three von
전체
오늘
어제
  • 분류 전체보기 (89)
    • BackEnd (5)
    • JAVA (5)
      • 기초개념 (5)
    • 자료구조 & 알고리즘 (7)
      • 기초수학 (0)
      • 선형 자료구조 (4)
      • 비선형 자료구조 (1)
      • 알고리즘 (1)
    • CS (18)
      • 컴퓨터구조 (0)
      • 운영체제 (3)
      • 시스템 소프트웨어 (0)
      • 네트워크 (4)
      • 디자인패턴 (10)
    • 데이터베이스 (4)
    • Spring (4)
    • Project (2)
      • 팀프로젝트 (1)
      • 토이프로젝트 (1)
    • 회고 (0)
    • Git&Github (8)
    • IntelliJ (5)
    • 코테 (16)
      • 프로그래머스 (10)
      • 백준 (6)
    • BookStudy (12)
      • 스프링 부트 핵심 가이드 (12)
    • C++ (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 윈도우에서 리눅스 명령어
  • 자바 선형자료구조
  • spring
  • 깃 이슈관리
  • heap 자료구조
  • java heap 자료구조
  • Java
  • vi/vim에디터사용
  • 명령어변환
  • 자바 자료구조 힙
  • github이슈관리
  • 제로베이스
  • 제로베이스백엔드스쿨
  • 백엔드 스쿨
  • 리눅스 명령어 윈도우 cmd창에서 가능
  • 코테
  • 백엔드
  • 백엔드스쿨
  • InteliJ에서 gitbash사용
  • 제로베이스백엔드스쿨미니과제
  • github
  • 인텔리제이에서 gitbash로 vi vim 에디터 사용하는법
  • 개발자
  • windowcmd창
  • vi/vim
  • 백엔드공부
  • IntelliJ 자동화
  • githubTest
  • 자바 자바해시맵
  • LiveTemplate사용

최근 댓글

최근 글

hELLO · Designed By 정상우.
three von
[프로그래머스 PCCP] Lv1 1번 붕대감기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.