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
를 사용해야 할 것 같다고는 생각했지만 인덱스와 반복문 사용이 업무에서 반복되다보니 습관적으로 내장 함수보다는 조건문, 반복문을 사용하려고 하는 것 같다.
내장 함수를 사용해서 코드를 더 효율적으로 사용하도록 계속 공부해야겠다.
감사합니다. 이런 정보를 나눠주셔서 좋아요.