인프런 커뮤니티 질문&답변

lll님의 프로필 이미지
lll

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

3-J

3-J 질문있습니다.

작성

·

482

0

pair<int,int> 를 쓰지않고 1000*y + x를 쓰는데에 특별한 이유가 있나요 ?

 

로직은 거의 비슷한데 pair를 썼을때 실행시간이 170ms 정도 되는데 강사님의 풀이는 4ms 밖에 안돼서 퍼포먼스에 지대한 영향이 있는건지 궁금합니다

답변 2

4

큰돌님의 프로필 이미지
큰돌
지식공유자

인프런의 모든 알람을 읽고 있는데.... 왜 이부분은 안떴는지... 이해가 안가네요. ㅠ 

늦게 답장을 드려 죄송합니다. 

당연히 pair보다는 int형 자료형이 더 빠릅니다. pair가 좀 더 복잡한 자료형이고 first, second인자 설정도 해야 하고 음... class와 단순한 숫자를 생각하면 됩니다. 

저게 그렇다고 해서 170ms와 4ms의 차이냐? 그런건 문제에 따라 다르기 때문에 정확하진 않습니다. 그러나 무튼 조금은 빠르다고 보시면 됩니다.ㅎ 

Q. 왜 1000 * y + x이냐?

예를 들어 "범위"가 500짜리인 y, x가 있다고 해봅시다. 이를 pair로 표현할 수도 있겠죠? 그러나 이를 1000 *  y + x로도 표현할 수 있습니다. 그리고 나중에 / 또는 %로 걸러내면 됩니다.  

어찌되었든 x는 500까지 표현되는 숫자인데

y가 1이고 x가 500은 1500이 되고 

y = 1500 / 1000 >> 1

x = 1500 % 1000 >> 500

이 되기 때문이죠. 

범위를 기반으로 이렇게 pair를 쓰지 않고 2차원을 1차원으로 표현할 수 있습니다. 

이부분을 왜 할까요?

물론 속도의 차이도 있긴 하나. 

사실 그것보다는 코드의 단순화에 있습니다. 

2차원만 표현할 경우 저거밖에 안되지만 나중에 3차원, 4차원... 표현하려고 할 때 이를 struct로 만들려면 귀찮은 그런 순간이 있습니다. 그 때 좀 더 단순화 시켜서 3차원을 2차원, 4차원을 3차원 등으로 만들 때 보통 쓰입니다. 

 

감사합니다. 

0

와 그렇게 깊은 뜻이

lll님의 프로필 이미지
lll

작성한 질문수

질문하기