Interface는 많이 들어보셨을 겁니다. 왜 쓰는 것일까요? 에 대한 질문에 대한 답은 어느 정도 하실 거라고 생각합니다. 그렇지만, 이게 쉽게 잘 와 닿는 개념은 아닐 거라 생각합니다. ps에서 많이 발생할 만한 상황을 예로 들어보겠습니다. Java에서 Comparable은 interface로 선언이 되어 있습니다. 그리고 이 인터페이스 안에는 Target과 매개변수를 비교하는 compareTo가 정의되어 있습니다. 이것은 실체는 없는 메소드로 정의가 되었습니다. '비교 가능한 기능을' 구현한 Obj입니다. 그런데, 잘 보면, 그냥 Obj는 생성자만 있을 뿐, 그 어디에도, 눈을 씻고 찾아봐도 비교를 하는 메서드가 없음을 알 수 있어요. 비교 가능 함수를 구현해 보겠습니다. compare 가능한 함..
전체 글 검색 결과
안녕하세요. chogahui05입니다. Java에는 HashTable이 있습니다. hash 기반의 자료구조를 동기화 했다고 생각하시면 편합니다. HashMap과 다른 부분 중 하나입니다. 먼저, 주요 필드들을 보도록 하겠습니다. table입니다. 이는, 무엇을 의미할까요? putVal 함수의 일부분입니다. tab에 table을 넣고 있습니다. 그리고 hash는 key 객체의 hashCode를 의미합니다. 이것과 무엇인가를 연산해서, index라는 값을 만들었습니다. 466번째 줄까지 보았을 때, index는 버킷 번호와 관련이 깊어 보입니다. 그리고 entry 값을 하나 받는데요. hashtable이나, hashmap은 키의 중복을 허용하지 않는 구조입니다. 그렇다면, 해당 버킷에 key가 있는지를 확인..
rewind 함수에 대해 알아보겠습니다. 이것은 stream의 파일 위치 지시자를 시작 위치로 옮기는 함수입니다. 별 게 없어 보입니다. 사실 이는, 다음과 같습니다. 다만, error 지시자가 초기화가 되고 안 되고는 다릅니다. 이는 링크에서 except that the error 구문을 해석하시면 알 수 있습니다. 이제 예제를 몇 개 보도록 하겠습니다. 먼저 아래 예제를 보도록 하겠습니다. 문자열을 입력받고, 입력 버퍼를 초기화 하기 위해서, rewind(stdin); 을 호출해 주었습니다. 다음에 문자 하나를 입력받습니다. 의도대로 동작했을까요? chogahui를 입력하고 엔터를 입력했습니다. 프로그램의 의도는, 다음에 소문자를 입력받는 것이였습니다. 그런데, 엉뚱한 문자인 개행 문자를 입력 받았습..
안녕하세요. 백준에서 활동하고 있는 chogahui05입니다. 저번 lazy propagation 시간에는 변환을 합성한다는 관점에서 접근했습니다. 이번에는, 그것을 알고 있다는 전제 하에서, 어떻게 코드를 이해하셔야 할 지 설명을 해 보도록 하겠습니다. 이 글에 있는 코드는 설명을 위해 중요 부분만 간략화 한 것임을 참고해 주시면 감사하겠습니다. 먼저, lazy는 누적된 변환이라는 것이 핵심이라고 했습니다. 그러면, 누적된 변환이라는 개념이 왜 나왔는지부터 생각해 봅시다. 그 전에, 연속된 k개의 구간을 어떻게 처리할 것인지부터 고민해 봅시다. 보통의 segment Tree에서 연속된 k개의 구간을 업데이트 하는 연산은 klogn번만큼 수행이 됩니다. 문제는, 이런 쿼리가 50만개 들어왔다고 생각해 봅..
c++의 STL을 쓰다 보면, 의도치 않게 공백을 포함해서 입력을 받아야 하는 경우가 있습니다. 이 때, 저는 fgets를 많이 이용합니다. 이 함수의 원형은 아래와 같습니다. 2번째 인자인 num이 눈에 보이는데요. num - 1개의 문자만큼 받거나, '\n'을 입력받거나, 아니면 EOF가 입력될 때 까지 입력을 받습니다. gets와는 다른 특성을 가지는데요. num이 없어요. 몇 byte까지 받아야 되는 정보가 없고, 단지 포인터만 넘겨줍니다. 문자열의 시작 주소만 넘겨준 상태에서, 크기를 모르는 상태에서 무한정 받아버리면 어떻게 될까요? 허용되지 않는 공간에 이상한 값을 덮어씌워 버릴 수 있어요. 안전하지 않아요. bound 조차 없기 때문입니다. 얼만큼 받을 건지에 대해서 넘겨주기 때문에, 기본적..
최근댓글