2023. 6. 3. 22:14, 알고리즘/BOJ
처음에
#include <bits/stdc++.h>
using namespace std;
int a, b, v;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>a>>b>>v;
cout<<v-a<<'\n';
cout<<a-b<<'\n';
cout<<v-a/a-b<<'\n';
cout<<(v-a/a-b)+1<<'\n';
}
이런 코드를 작성하였을때, 입력값을 5 ,1 , 6으로 주었을때,
각각의 출력값을 일렬로 나열해보면,
형태로
v-a==1
a-b==4
v-a/a-b == 4
(v-a/a-b)+1 ==5 형태로 값이 나와서
왜 1/4을 했을때의 값이 4가 나올까, int로 정의된 수들 끼리의 연산이니까 나누면 몫이 0이니까
v-a/a-b==0으로 나와야 하는데 왜이럴까 싶어서, 오랜시간을 고민했는데,
#include <bits/stdc++.h>
using namespace std;
int a, b, v;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>a>>b>>v;
cout<<v-a<<'\n';
cout<<a-b<<'\n';
cout<<(v-a)/(a-b)<<'\n';
cout<<(v-a)/(a-b)+1<<'\n';
}
이렇게 처음처럼 v-a/a-b 형태가 아니라, (v-a)/(a-b)형태로 작성하니까 내가 원하는 의도대로 코드가 순서에 맞게 실행되었다.
결국에 단순하게 내가 보기에 이해가 되는 순서대로 작성한것 뿐이고, 컴퓨터가 이해하는데 있어서는
-a/a를 먼저 계산해주어서 6-1-1 ==4 가 된것이다.
그냥 수를 손으로 써서 계산하는거였으면
v-a
----------
a-b
형태로 위아래로 구분지어 있어서 내가 눈으로 보기에는 그냥 정상적으로 작성했구나 생각했던건데,
이렇게 작성하면 문제가 있는 형태의 코드작성이었던 것이다.
앞으로는 확실하게 +와 -와 *, /가 섞여있는 연산의 경우, 코드의 실행 순서에 대해서 확실하게 이해하고, + , - 가 먼저 실행되어야 하는 경우 ( ) 을 확실하게 쳐주어서 코드가 실행되어야 하는 순서를 명확하게 구분지어 주도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 1456번 문제를 통해 보는 i<=b/p( i*p<=b 대신) 과 i>=a/p(i*p>=a 대신) 의 차이점. (0) | 2023.06.04 |
---|---|
boj 10610번 문제를 통해 정말 오랜만에 접해보는 3의 배수인지 아닌지 판단하는 판단법에 관하여. (0) | 2023.06.03 |
boj 9613번 문제를 통해 배우는 type 설정의 중요성. (0) | 2023.06.03 |
최대공약수를 구하기 위한 유클리디안 알고리즘에 대하여. (0) | 2023.05.31 |
boj 7570번 문제에 대한 이해를 도와주는 블로그글 첨부. (0) | 2023.05.31 |
Comments, Trackbacks