문제를 풀다가 long long 타입으로 만든 ans라는 변수에 새로운 값을 대입할때 처음 보는 코드를 보게되어서 검색해보았다.
while (!S.empty() && S.top().X >= h)
{
// 스택의 top에 있는 막대 높이가 현재 높이보다 크거나 같으면
// 스택의 top에 있는 막대로부터 최대 넓이를 계산하고 갱신
ans = max(ans, 1LL * (i - S.top().Y) * S.top().X);
idx = S.top().Y; // 현재 인덱스를 스택의 top에 있는 막대의 인덱스로 갱신
S.pop(); // 스택에서 top에 있는 막대를 제거
}
S.push({h, idx}); // 현재 막대를 스택에 추가하고 인덱스를 저장
이러한 내용이었고, 이 부분중에서
이 중에서도 1LL* 바로 이곳이다.
1LL을 곱해주겠다고 하는데, 코드에서 발견한 주석의 내용에 의하면 이 과정이 의미하는바가,
라고 하는데, 아마 stack<pair<int,int>> S; 로 선언해놓은 스택 때문에, ans는 longlong 이니까 1LL을 곱해주어서 계속해서 ans를 새롭게 대입할때마다 형변환을 편하게 처리하겠다는 의미같은데, 1LL이 정확히 어떤 의미인지 궁금해서 gpt에 검색해보았다.
위와 같은 내용을 얻을 수 있었고, 주석으로 정보전다를 하는 부분과 함께 보았을때, 무슨 맥락으로 1LL을 사용하였는지 이해할 수 있는부분이었다.
현재 내 수준에서는 애초부터 pair<long long, long long>으로 처리할것 같은데, 이러한 코드를 따라해보며
이런식의 표현법에 익숙해져 보도록 하자.
++
리터럴 상수 라는 얘기가 어떤 의미인지 정확히 알고싶어서 검색한 내용을 첨부해보면,
위와 같은 정보들을 얻을 수 있었다.
참고하도록 하자.
그리고 결국 위와같이 1LL을 곱하는 연산을 하는 이유가, 마지막에 롱롱타입으로 편하면서도 확실하게 바꾸기 위함이라고 판단하여서 c++ gcc 상에서 longlong과 int의 연산에서 데이터의 반환타입에 대해서 검색해보니 얻은 정보를 첨부한다.
결국 확실하게 longlong을 반환받고 그렇게 편하게 바꾸기 위해서 1LL을 중간에 곱해준것으로 보인다.
이 표현에 익숙해진다면 int를 사용하다가 필요한 부분에 1LL을 곱해서 확실하게 long long으로 반환받을 수 있을것 같다.
기억해보고 사용해보도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
cout을 통한 iterator의 출력의 경우에 관하여. (0) | 2023.04.16 |
---|---|
c++ while문에서 while문 내부에서 종료 조건에 도달했을때의 어떻게 진행되는지에 대해서. (0) | 2023.04.16 |
c++ 이분탐색 문제를 할때는 sort()로 미리 정렬을 시켜놓고 문제를 풀어야 한다는걸 기억하자. (0) | 2023.04.13 |
c++ binary_search()가 이미 stl로 있다는걸 기억하고, 이분탐색 문제의 경우 이 stl을 활용하도록 하자. (0) | 2023.04.13 |
c++에서 vector을 활용할때, resize(n); 함수를 사용하는 경우에 대하여. (0) | 2023.04.13 |