[MATLAB Cody] Problem 10. Determine whether a vector is monotonically increasing

young·2023년 8월 8일
0
post-thumbnail

MATLAB cody?

MATLAB 회사인 mathworks에서 제공하고 있는 매트랩 코딩 커뮤니티로,
매트랩 관련 코딩테스트 문제들을 제공하고 있다.
매스웍스 회사뿐만 아니라 사용자가 코딩 테스트 문제를 내고 다른 사람이 풀도록 할 수도 있다.
매트랩 코드가 익숙하지 않은 사람들에게 추천하는 사이트다.
매스웍스 계정이 있어야 이용 가능하며, 대부분 문제들이 무료다.
(아직 모든 문제를 본 것이 아니어서 정확하지 않음)

cody 사이트 : https://kr.mathworks.com/matlabcentral/cody/

Determine whether a vector is monotonically increasing 문제

Return true if the elements of the input vector increase monotonically (i.e. each element is larger than the previous). Return false otherwise.

Examples:

 Input  x = [-3 0 7]
 Output tf is true

 Input  x = [2 2]
 Output tf is false

SOLUTION

function tf = mono_increase(x)
  tf = false;
end

문제 링크

Problem 10. Determine whether a vector is monotonically increasing

문제 해석

input 벡터의 모든 값이 단조로 증가하는지 판별하는 문제이다.
단조로 증가하는 것을 어떻게 구현할 수 있을지만 생각한다면 쉽게 풀리는 문제이다.

문제 풀이

정답 코드 (community's preferred solution)

이번 문제는 풀어놓고 내가 너무 복잡하게 생각하고 비효율적으로 문제를 풀어서 community's preferred solution을 먼저 제시한다.

function tf = mono_increase(x)
  tf = all(diff(x)>0);
end

정답 풀이

  1. 차이값을 구현하는 함수가 diff임을 알고 이를 이용한다.
    input vector x를 diff에 넣었을 때 각 벡터 요소의 차이값이 output으로 나옴을 알면 된다.
  1. all 함수를 활용한다. 모든 값이 함수 내의 값을 만족하면 true를, 하나라도 만족하지 않으면 false를 출력하는 all 함수를 diff(x)>0 에 대입하여 단조 증가가 아니면 false가 출력되도록 tf를 구현한다.

내 풀이 코드

function tf = mono_increase(x)
 i=1;
 tmp=[];
 while 1
     if i==size(x,2)
         break;
     end
     if x(i) < x(i+1)
         tf = true;
     else 
         tf= false;
         break;
     end
     i=i+1;
 end
end

문제 풀이

  1. 현재 값에 비해 다음 값이 증가하는지 모든 값에 대해서 확인하도록 while문을 이용했다.
    i가 벡터 크기가 되면 반복문을 깨도록 구현했다.
  1. false가 하나라도 있으면 tf는 false이므로 하나라도 현재 값보다 다음 값이 증가하지 않으면 바로 false를 출력하도록 작성했다.

문제 풀이 회고

이전 값과 현재 값을 비교해야 한다는 생각에 갇혀 반복문만 생각하다가 diff 함수를 잊고 말았다. all이나 any를 사용해야 할 것 같다고는 생각했지만 인덱스와 반복문 사용이 업무에서 반복되다보니 습관적으로 내장 함수보다는 조건문, 반복문을 사용하려고 하는 것 같다.
내장 함수를 사용해서 코드를 더 효율적으로 사용하도록 계속 공부해야겠다.

profile
한 걸음씩 쌓아가는 데이터 분석

2개의 댓글

comment-user-thumbnail
2023년 8월 8일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

1개의 답글