boj 2075번 문제를 통해 다시 접하게된 if(n<(int)pq.size()) 형태에서의 (int)의 역할.

n<(int)pq.size() 형태로 코드를 작성하는 것에서 (int)를 쓰는것이 좌측은 signed int, 우측은 unsigned int 이기 때문에 비교해 주는데 있어서 둘다 unsigned int로 맞추어 주기 위해서 캐스팅을 해주는 것으로 알 고 있었으며, 이번에 다시 접했기 떄문에 이에 대해서 다시 한번 더 검색해보았다. 

 

이와 같은 힌트를 얻을 수 있었고, 일부러 (int)를 제외하고 한번 제출해보았다. 물론 예상대로 통과는 하였고 내부로 들어가서 메세지를 확인해보니, 

 

Main.cc: In function ‘int main()’:
Main.cc:16:13: warning: comparison of integer expressions of different signedness: 
‘int’ and ‘std::priority_queue<int, std::vector<int>, 
std::greater<void> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
   16 |         if(n<pq.size()) pq.pop();/*원래 n<(int)pq.size() 형태로 작성하는것이 
      |             ~^~~~~~~~~~          정석이지만 이렇게 제출해봄/*
      |

이와 같은 내용을 확인해볼 수 있었다. 

이처럼 결국 좌측과 우측의 타입을 맞추어 주기 위해서 (int) 를 통해서 캐스팅을 하며, 이거 없어도 물론 제출해서 통과할 수 있지만, 

정확하게 작성하기 위해서 (int)를 사용하는 습관을 들이도록 하자. 

 

  Comments,     Trackbacks