[C++] 백준 2841번: 외계인의 기타 연주

2022. 7. 7. 16:11·problem solving/백준

문제

https://www.acmicpc.net/problem/2841

 

풀이

 

 

2차원 배열로 풀어도 되지만 top index를 데리고 다니기 싫어서 stack으로 풀었다.

지금 누르고 있는 줄의 프렛을 저장하는 변수를 생성했다

자료구조를 시각화 하면 대충 아래처럼 생각하면 된다 

 

stack[줄] = [프렛 | 프렛 | ... ] 

 

 

  • 누르려는 음  <  stack[줄]의 가장 높은 프렛 
    • 가장 높은 프렛이 누르려는 음보다 작을 때까지 손가락을 떼야 한다. 
  • 누르려는 음 == stack[줄]의 가장 높은 프렛 
    • 손가락을 움직이지 않는다.
  • 누르려는 음  >  stack[줄]의 가장 높은 프렛 
    • 누르려는 음을 하나 더 누르면 된다. 

 

 

+ 스택이 비었는지 체크하는 부분을 쉽게 처리 하는 방법을 알았다.

https://ryute.tistory.com/3

위 블로그에서 얻은 아이디어인데 stack에 0을 집어 넣어줘서 조건문을 줄일 수 있었다. 

 

소스

#include <iostream>
#include <stack>

int main()
{
    std::stack<int> stk[7]; // jul[fret]
    int N =0, P =0;
    int j =0, fret =0;
    int result = 0;

    std::cin >> N >> P;
    //here!
	for(int i=0; i<7; ++i)
	{
		stk[i].push(0);
	}
	
    for(int i =0; i<N; ++i)
    {
        std::cin >> j >> fret;

        while(stk[j].top() > fret)
        {
            stk[j].pop();
            ++result;
        }
        if(stk[j].top() != fret)
        {
            stk[j].push(fret);
            ++result;
        }
    }
    

    std::cout << result;
    return 0;
}

 

저작자표시 비영리 변경금지 (새창열림)
'problem solving/백준' 카테고리의 다른 글
  • [C++] 백준 1406번: 에디터
  • [C++] 백준 5397번: 키로거
  • [C++] 백준 2304번: 창고 다각형
  • [C++] 백준 3986번: 좋은 단어
u1qns
u1qns
http://github.com/u1qns
  • u1qns
    개발 블로그
    u1qns
  • 전체
    오늘
    어제
    • 분류 전체보기 (173) N
      • 회고 (1)
      • programming (17)
        • 개념 정리 (6)
        • CI CD (1)
        • 트러블 슈팅 (0)
        • 환경설정 및 팁 (7)
      • problem solving (155) N
        • 개념 정리 (3)
        • 백준 (129) N
        • SWEA (15)
        • 프로그래머스 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    cpp
    BFS
    되추적
    boj
    DFS
    cmath
    삼성청년SW아카데미
    완전탐색
    투포인터
    백준
    미해결
    HELLOSSAFY
    SSAFY수료식
    그리디
    구현
    POW
    C++
    DP
    SWEA
    SSAFY
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
u1qns
[C++] 백준 2841번: 외계인의 기타 연주
상단으로

티스토리툴바