
MATLAB 회사인 mathworks에서 제공하고 있는 매트랩 코딩 커뮤니티로,
매트랩 관련 코딩테스트 문제들을 제공하고 있다.
매스웍스 회사뿐만 아니라 사용자가 코딩 테스트 문제를 내고 다른 사람이 풀도록 할 수도 있다.
매트랩 코드가 익숙하지 않은 사람들에게 추천하는 사이트다.
매스웍스 계정이 있어야 이용 가능하며, 대부분 문제들이 무료다.
(아직 모든 문제를 본 것이 아니어서 정확하지 않음)cody 사이트 : https://kr.mathworks.com/matlabcentral/cody/
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을 먼저 제시한다.
function tf = mono_increase(x) tf = all(diff(x)>0); end
- 차이값을 구현하는 함수가
diff임을 알고 이를 이용한다.
input vector x를 diff에 넣었을 때 각 벡터 요소의 차이값이 output으로 나옴을 알면 된다.
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
- 현재 값에 비해 다음 값이 증가하는지 모든 값에 대해서 확인하도록 while문을 이용했다.
i가 벡터 크기가 되면 반복문을 깨도록 구현했다.
false가 하나라도 있으면 tf는false이므로 하나라도 현재 값보다 다음 값이 증가하지 않으면 바로false를 출력하도록 작성했다.
이전 값과 현재 값을 비교해야 한다는 생각에 갇혀 반복문만 생각하다가
diff함수를 잊고 말았다.all이나any를 사용해야 할 것 같다고는 생각했지만 인덱스와 반복문 사용이 업무에서 반복되다보니 습관적으로 내장 함수보다는 조건문, 반복문을 사용하려고 하는 것 같다.
내장 함수를 사용해서 코드를 더 효율적으로 사용하도록 계속 공부해야겠다.
감사합니다. 이런 정보를 나눠주셔서 좋아요.