제거 오늘 경험한 간단한 Loop를 공부해 보세요. 쉬운건데 해결하는데 좀 시간이 걸렸어요.
저는 아래의 B를 초과하는 A집합의 원소를 찾아서, 그중에서 다시 가장 큰 숫자를 찾는 code를 짜려합니다.
Case 1 Code
A=[1:10] %A는 1~10의 10개의 원소를 가진 집합입니다.
B=6 %제가 원하는 기준숫자입니다.
Range=A>B % B보다 큰 A의 원소를 찾고 싶어요
if numel(Range)>0; % 만일 Range의 원소가 1개라도 있다면
index=max(find(Range==1)); % 그 원소중에 가장 나중값을 골라라.
best=A(index); %Index에 해당하는 A집합의 원소를 골라라
else
best=-1;
end
best
Case 1 해답
Range =
0 0 0 0 0 0 1 1 1 1 %여기서 0이란 말은 숫자 0이 아니고, 해당사항이 없다(No)라는 뜻입니다.
%%여기서 1이란 말은 Yes란 뜻입니다.
index =
10
best =
10
예상과 같은 결과를 얻었읍니다. 아니 얻은 듯 했습니다. 다음을 보면 Empty Matrix (논리상 아무 원소가 없는 집합)에 대한 처리를 하지 않았기때문입니다.
Case 2 Code (동일한 코드지만 Range가 zero가 되는 영집합의 경우입니다.
A=[1:5]
B=6
Range=A>B
if numel(Range)>0;
index=max(find(Range==1));
best2=A(index);
else
best2=-1;
end
best2
Case 1 해답
Range =
0 0 0 0 0 %여기서 0이란 말은 숫자 0이 아니고, 논리상 No 라는 뜻입니다.
best2 =
Empty matrix: 1-by-0
-1을 기대 했는데 Empty matrix: 1-by-0 라는 error값을 줍니다.
Code 수정 (Empty matrix: 1-by-0 나오면 zero로 변환해라.)
A=[1:5]
B=6
Range=A>B
C=A(Range) %해당 A 원소값
if numel(C)>0;
index=max(find(Range==1));
best2=A(index);
else
best2=-1;
end
best2
Case 수정 해답
C =
Empty matrix: 1-by-0
best2 =
-1
isempty(C)를 사용할 경우,
if isempty(C)==1; 을 시용하면 된다.