<aside> ❗ ‘여러 풀이 한눈에 보기’는 기술에 대해 설명하기보다 다양한 풀이들을 소개하는 시리즈이다. 기존 글들과 비교해서 다소 건조할 수 있겠지만, 나열식으로 빠르고 간단하게 핵심만 콕 짚는 것이 이 시리즈의 컨셉이다. 바로 출발해 보자.

</aside>

어떤 코드가 잘 쓴 코드고 어떤 코드가 나쁜 코드인지 가려내고 지적하려는 목적이 아니다. 다양한 풀이 방법을 보고 배우려는 목적이다.

사실 당연하게도 사람마다 풀이가 너무 제각각이기 때문에 따로 코드를 제공하지 않고 공통점만을 빠르게 짚고 넘어가겠다. 누가 최초로 풀었는지 특정하기 힘들고 여러 사람이 같은 생각을 할 수 있다는 생각에서도 그렇게 하였다.

2920번: 음계

Table of contents

카운터 변수를 이용하는 방법

  1. 길이 8짜리 int 배열을 만든다.
  2. 2개의 올라가는 카운터와 내려가는 int 카운터를 만든다.
  3. 8번 반복하는 for loop를 통해 배열로 입력값을 읽어들인다.
  4. 8번 반복하는 for loop를 만들어서,
    1. 그 안에서 if 문으로 올라가는 배열인지 내려가는 배열인지 확인하고, 그 분기에 따라 그에 맞는 카운터 변수를 증가시킨다.
  5. 루프가 끝나고 카운터 변수의 값에 따라 분기하여, 내려가는 카운터가 목표된 숫자면 "descending", 올라가는 카운터가 목표된 숫자와 같다면 "ascending" , 둘 다 아니라면 "mixed" 를 출력한다.

이렇게 푼 풀이도 많았다.

  1. 2개의 올라가는 카운터와 내려가는 카운터를 만든다.
  2. 반복문으로 입력값을 EOF까지 읽는다.
    1. 반복문 안에서 현재 반복문의 i, j값과 입력값을 비교한다. 여기서 i는 1부터 8까지 순차적으로 증가하고, j는 8부터 1까지 순차적으로 감소한다.
    2. 그 두가지를 비교해서 올라가는 배열이라면 올라가는 카운터를, 내려가는 배열이라면 내려가는 카운터를 올린다.
  3. 카운터 값에 따라 결과를 출력한다.

카운터 대신 상행인지 하행인지 저장하는 플래그를 두 개 만들어 출력하는 방법도 있었다. 그 플래그의 값은 for문에서 검사하여 바뀐다. 둘 다 아니라면 섞임을 출력할 것이다.