백준 연습
2920번 음계 (블락 적절히 나누기!)
빙하둘리
2022. 8. 21. 17:04
728x90
의문사항
두번째 조건문에 else if를 넣었을 때와 if문을 넣었을 때 결과가 다른 이유?
#include <stdio.h>
#include <iostream>
using namespace std;
int ele(int* arr)
{
for (int i = 1; i < 8; i++)
{
if (arr[i] != arr[i - 1] + 1)
return 0; // 상승세가 아닌 즉시 0을 리턴하자.
}
return 1; //상승세면 1
}
int down(int* arr)
{
for (int i = 1; i < 8; i++)
{
if (arr[i] != arr[i - 1] - 1)
return 0; //하락세가 아닌 즉시 0을 리턴하자
}
return 1; // 하락세면 1
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
//new로 동적할당 해볼까?
int arr[8] = { 0, };
for (int i = 0; i < 8; i++) {
cin >> arr[i];
}
int dn = down(arr);
int up = ele(arr);
if (dn == 1)
cout << "descending";
else if (up == 1) // else if 할 때는 멀쩡한데 if 하면 이상해요
cout << "ascending";
else
cout << "mixed"; // 87654321이 왜?
return 0;
}
if문안에 if(strlen(arr)) 이런 식으로 부르면 시간 복잡도가 커지기 때문에 int 변수=함수; 이렇게 값을 뺐다.
내 것 디버깅 해보자!
#include <stdio.h>
#include <iostream>
using namespace std;
int ele(int* arr)
{
for (int i = 1; i < 8; i++)
{
if (arr[i] != arr[i - 1] + 1)
return 0; // 상승세가 아닌 즉시 0을 리턴하자.
}
return 1; //상승세면 1
}
int down(int* arr)
{
for (int i = 1; i < 8; i++)
{
if (arr[i] != arr[i - 1] - 1)
return 0; //하락세가 아닌 즉시 0을 리턴하자
}
return 1; // 하락세면 1
}
//while문으로 돌려볼까?
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
//new로 동적할당 해볼까?
int arr[8] = { 0, };
for (int i = 0; i < 8; i++) {
cin >> arr[i];
}
int dn = down(arr);
int up = ele(arr);
if (dn == 1)
cout << "descending " << "dn과 up은 "<<"->"<<dn << "&"<<up<<"\n";
//**아래의 if else문이 한 블락처럼 실행된다.
if (up == 1) // else if 할 때는 멀쩡한데 if 하면 이상한 이유, if else가 한 블락처럼 있어서
cout << "ascending " << "dn과 up은 " << "->" << dn << "&" << up << "\n";
else
cout << "mixed " << "dn과 up은 " << "->" << dn << "&" << up << "\n"; // 87654321이 왜?
//dn과 up값은 함수 호출 후 저장한 값이어서 if문 다음에 if else를 실행한다고 해서 값이 달라지지 않는다.
return 0;
}
if문 if문 else문 이렇게 있으니
if문 실행 후 if else문을 실행하는 식으로 해서 저렇게 출력되는 것이다.
dn과 up 값은 함수 호출 후 저장한 값이어서 if문 다음에 if else를 실행한다고 해도 값은 그대로다.
조건이 여러 개 있을 때, if문 여러 개에 else문 하나 쓰지 말고
if {...} else if {...} else if {...} else if{...} 하고 마지막 조건은 else {...}로 마무리 해줘야한다.
[추가 자료]
https://transferhwang.tistory.com/81
링크를 걸은 포스팅은 if와 else의 차이점에 관한 포스팅인데, 변수에 초기화해준 값이 함수의 return 값이 아니라는 점이 내 코드와 좀 다르다.
그렇지만 if문else if문 대신 if문 if문을 사용하면, 두번째 if문은 참과 거짓에 상관없이 실행된다. 실행하면서 최대값, 최소값이 모두 갱신이 된다.
728x90