본문 바로가기

Programming/Algorithm

[바킹독: 알고리즘] 기초 코드 작성 요령 2

※ (링크) 바킹독 유튜브 영상을 통해

학습한 내용을 정리한 것입니다.

 

본인은 JAVA를 활용해 학습하였습니다.

비상업적 목적이며, 개인 복습을 위해 업로드한 글임을 다시 한 번 더 이야기드립니다.

 

본문의 모든 내용의 출처는 아래 명시된 링크와 같습니다.

 

 

[목차]  STL과 함수 인자, 표준 입출력, 코드 작성 팁

 

[실전 알고리즘] 0x02강 - 기초 코드 작성 요령 II

안녕하세요, 바킹독입니다. 이전 단원에서 오지고 지리게 고통받으셨을텐데 이번에는 훨씬 쉬우니까 걱정을 덜어내시고 마음 편하게 보시면 됩니다. 저 아직 0x18살이니까 급식체 써도 되는거

blog.encrypted.gg

출처: blog.encrypted.gg/923?category=773649


 

STL(Standard Template Library)

자바에서의 STL은 아래 링크에서 학습하면 좋을듯 합니다.

 

자바에서 Vector와 Stack 컬렉션이 쓰이지 않는 이유?

자바 컬렉션 프레임워크 Vector와 Stack은 왜 안쓰는가? C++ STL 중 Vector는 Stack과 다르게 random access가 가능하고, iterator 등 구성 원소에 접근이 용이한 여러 기능을 가지고 있어 널리 쓰인다. Vector..

aahc.tistory.com

 

 

java에서 STL의 multimap 구조를 구현해 봅시다.

 C++의 STL에서 multimap은 상당히 유용하게 쓰입니다. Java에서는 그렇게 쓸 수 없을까요? 저는 Key값이 중복되는 경우에도, Map 계열에 저장하고 싶습니다. 어떻게 하면 좋을까요?  그 전에 Java의 Map

codingdog.tistory.com

 

참조자(Reference)와 함수인자

C에서 STL은 함수 인자로 보낼경우 복사본을 만들어 넘기기에, 다른 함수에서 변경된 건은 원본에 영향을 주지 않습니다.

하지만 값을 복사하지 않고 값을 변경하는 기능을 수행하고 싶은 경우 참조자를 이용하면 됩니다!

 

출처 - 바킹독 ( https://www.youtube.com/watch?v=6lhVHP8bkPA&t=1s )

위 경우 참조주소만 복사되기에 시간복잡도를 낮추어 원하는 기능을 수행할 수 있습니다.

 

JAVA의 경우 new연산자로 생성되는 Reference type의 함수는 Heap 영역에 생성되어 같은 주소를 공유합니다. 그렇기에 다른 함수에서 변경될 경우, 원본에도 영향을 줍니다.

 

 


표준 입출력

코딩테스트에서도 마찬가지로 표준 입/출력을 사용합니다. JAVA의 경우 Scanner 혹은 BufferedReader를 활용합니다. 이 둘을 비교하는 포스팅은 추후 다룰 예정입니다.

 

 

684m는 Scanner를 이용해 코드를 작성한 것이며, 352ms는 BufferedReader를 이용해 갖성한 것입니다.

둘의 차이를 간단하게 이야기하자면, 실행 속도에 차이가 크다는 것입니다. Scanner의 경우 처리 속도가 느린편이며, BufferedReader의 경우 처리 속도가 빠른 편입니다. 상세한 비교 내용은 앞서 이야기드렸듯 추후 깊게 학습해 추가하겠습니다.

 

출력도 마찬가지입니다. System.out.println( ) 보다는 BufferedWriter가 빠른데요. 마찬가지로 추후 깊게 학습해 추가하겠습니다.

 

참고로 코딩테스트 문제에서 채점할 경우, 입출력이 혼동되어 있어도 채점에 영향을 주지 않습니다. 즉, 어떻게 입력되고 출력되든 정답에 맞게 출력되면 된다는 이야기입니다.

 


코드 작성팁

 

  1. 코딩테스트와 개발은 다릅니다!

    백준 10871문제를 보면 이해가 빠를 것입니다. 

    중요한 것은 내가 헷갈리지 않는 범위 안에서 코드를 짧게 작성하는 것이 필요합니다. 코딩테스트는 어떻게해서든 제한시간 내에 정답을 받는 것이 목적입니다. 그렇기에 내가 빠르게 짤 수 있는 방식으로 빠르게 작성하는 것이 중요합니다.


  2. 디버거는 굳이 사용하지 않아도 됩니다!

    차라리 중간 변수를 확인하고 싶으면 출력해서 확인하는 것을 권장드립니다.