스택에서 위와 같은 분류로 되어있는 문제들을 해결해보려고 노력했다.
몇 문제는 풀었지만, 뒷부분의 많은 문제들을 풀지 못했다.
하지만 그래도 꾸준하게 보다보면 다음에는 풀어낼 수 있을 것이라 생각한다. 꾸준하게 하루에 30분에서 한시간씩이라도 못풀었던 문제들을 붙잡고 보다보면 충분하게 이해하고 풀어내는 날이 올것이다.
오늘 블로그에 정리한 내가 배운 내용들의 내용을 한곳으로 모아보면, 아래의 내용이고, 오늘은 그렇게 많은 내용을 새롭게 정리하지는 않은것 같다. 지지부진한 느낌이 강하지만 끝날때까지 지속해보도록 하자. 머리가 트이는 때가 분명 올것이다.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
문제를 풀다가 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으로 반환받을 수 있을것 같다.
기억해보고 사용해보도록 하자.
'크래프톤 정글' 카테고리의 다른 글
TIL 23.4.18// c++ 알고리즘 공부 지속중. (0) | 2023.04.18 |
---|---|
TIL 23.4.16// 주로 코딩테스트용 c++과 관련된 기초적인 사항들을 공부한 하루. (0) | 2023.04.16 |
TIL 23.4.13// gpt 친구가 일을 아주 잘하는구나. vector에 대하여. (0) | 2023.04.13 |
TIL// c++은 main에 등장하는 함수를 main보다 먼저 적어주어야 하나보다. c#은 안그랬던걸로 기억하는데. (0) | 2023.04.12 |
TIL// 23.4.10 배운점들 모음 (0) | 2023.04.10 |