파이썬에서 간단하게 랜덤하게 수를 뽑을 때 이용하는 randint와 randrange에 대해서 알아봅시다. 문제를 출제하기 위해 제너레이터를 만드는 경우에는 거의 100%의 확률로 이용됩니다. 그러니, 잘 알아두는 것이 좋겠습니다. random에는 randint가 있어요. 1번째 인자가 1이고, 2번째 인자가 6이에요. res에 add를 10000번 하는데요. rd.randint(1,6)의 결과를 계속 set에 추가하는 것을 의미해요. 파이썬에서 set은 중복을 제거하는 자료구조이니, 6이 여러 번 들어가도 1번만 들어가게 될 겁니다. 결과는 1, 2, 3, 4, 5, 6이 나옵니다. 즉, randint(a, b)는 a 이상 b 이하의 랜덤한 수가 나옵니다. 2개의 수만 받고 있음을 알 수 있어요. 저는..
레퍼런스 검색 결과
string을 int로 바꿀 수 없을까요? c_str로 raw pointer를 리턴받고, atoi에 raw_pointer를 넘겨주면 됩니다. 사실 저는 stoi를 알기 전까지 이렇게 했습니다. 예제 프로그램을 보도록 하겠습니다. 저는 string "123"을 정수 123으로 바꾸고 싶습니다. 그렇게 하려고 s.c_str()의 리턴값을 atoi에 넣었습니다. 그러면, 실제 "123"을 들고 있는 위치인 p를 atoi에 넣게 됩니다. atoi는 이 위치부터 NULL이나, '0', ... '9'가 아닌 다른 것을 만날 때 까지 읽게 될 겁니다. 문자열에 대충 이래 저장이 되어 있다고 하면, '1'을 읽고 '2'를 읽고 '3'을 읽고 난 후에 숫자가 아닌 문자가 있으니, break를 걸 겁니다. 따라서, 이 때..
백준 문제를 풀다 보면, 균형 이진 트리를 써야 하는 경우를 종종 보셨을 겁니다. 이것을 다룰 때, x보다 큰 것 중 제일 작은 키, 같거나 큰 것 중 제일 작은 키, 작은 것 중 제일 큰 키, 작거나 같은 것 중 제일 큰 키를 실시간으로 구해야 하는 상황을 접하셨을 겁니다. java에서는 어떻게 하는지 간단하게 알아봅시다. 먼저, c++의 map에는 lower_bound, upper_bound가 있었습니다. 이와 유사하게 자바의 TreeMap에는 ceilingKey와 higherKey가 있습니다. 이 둘의 설명을 보겠습니다. 먼저, ceilingKey 메소드는 제일 작은 키를 리턴한다고 하는데요. 조건이 하나 있습니다. given key보다 크거나 같은 것. 예를 들어, 1, 2, 3, 7이 있다고 해..
저번에, 경로 조작 공격을 이 글에서 다루었습니다. 글이 난이도에 비해서 꽤 길었는데요. 요약하면 이거였습니다. 클라이언트의 입력을 곧이 곧대로 믿지 말라. 이것에 대해서 조금 더 찾아보면, 방지책으로 절대 경로를 쓰라고 되어 있습니다. 이 답글이나, 이 문서에서도 강조하고 있는 부분이기도 합니다. 데이터 파일들은 특정한 경로 안에 있을 것이기 때문입니다. [관련글] 사용자의 입력값과 path traversal 공격 File 클래스를 보면, getAbsolutePath와 getCanonicalPath가 있습니다. 아래 예제를 보겠습니다. 테스트 케이스는 하나입니다. ..\\.idea입니다. 이것은 프로젝트 폴더의 상위 디렉토리로 이동해서 .idea로 이동하겠다는 의미입니다. 출력 결과만 보도록 하겠습니다..
java의 arrayDeque가 어떻게 구현되었는지 간단히 알아보겠습니다. 세세하게 뜯지는 않을 거고, 중요한 변수들과 메서드만 보도록 하겠습니다. 먼저, 이 메서드를 보도록 하겠습니다. 코드를 봐도 뭔 말인지 모르겠습니다. 이럴 때는 쪼개시면 됩니다. 먼저, if문을 만족하지 않는다면, MIN_INITIAL_CAPACITY개의 원소를 저장할 수 있는 배열이 생성됩니다. 이 값은 디폴트로 8입니다. 만약에, numElements가 8보다 크거나 같으면 어떻게 될까요? 그러면 이런 알 수 없는 코드들이 수행되는데요. 어렵지 않아요. 132번째 부터 136번째 줄까지는 bit or 연산을 하고 있어요. 우항을 보면, >>> 연산자가 있는데요. 이는 쉽게 말해서 우측으로 이동한다 정도로 생각하심 됩니다. in..
최근댓글