카톡방에서 python은 'abc' * 5와 같은 문법이 있는데 자바에는 없는지 물어보셨습니다. java 8에서는 어떻게 쓰는지 잘 모르겠습니다. 아마, 이런 식으로 쓰지 않을까 싶습니다. "abc"를 10번 반복하기 위해서, StringBuilder의 append 메소드를 썼습니다. abc를 10번 반복한다는 것이, abc를 10회 뒤에 추가하는 concat과 같기 때문입니다. 다음에, StringBuilder를 toString으로 변환한 다음에, 출력합니다. 4 ~ 5줄 정도에 구현할 수 있습니다. 실행 결과는 위와 같이 나옵니다. 그런데, java 11부터는 이렇게 하지 않으셔도 됩니다. repeat 메서드는 반복 횟수만 넣으면 됩니다. 6번째 줄의 s.repeat(10)은 문자열 s를 10번 반복..
레퍼런스/예제 검색 결과
Arrays의 BinarySearch는 정렬된 배열에서 이진 탐색을 할 수 있습니다. 저는 여태까지 자바의 바이너리 서치가 값이 없으면 단순히 -1을 리턴하는 줄 알고 잘 써먹지 않았습니다. 그런데, 설명을 보니 그러지 않아도 되겠다는 것을 알 수 있었습니다. 공식 설명을 먼저 보겠습니다. 이 메서드는 아시다시피, sorted가 되어야 동작하는 알고리즘입니다. 리턴 값에 대한 설명을 봅시다. 해당 key를 찾으면 그 위치를 리턴하고, 그렇지 않으면 -Insertion point-1 값을 리턴합니다. Insertion point가 어떻게 정의되는지도 위에 나와 있는데요. key보다 greater한 최초의 위치라고 되어 있어요. 이는 Collections의 binarySort나 Arrays의 binarySo..
이전에 저는 2개의 필드를 가지는 구조체를 custom 하게 정렬하거나 비교할 때, < 연산자를 구현한 적이 많았습니다. 예전에 제가 ps를 할 때는 그랬습니다. 생각이 바뀐 것은 python의 tuple을 맛보고 난 후였습니다. c++에도 tuple이 있는데요. 백준에서 문제를 풀기 위해 이 정도만 알아도 되겠다 싶은 것들만 작성해 보겠습니다. tuple을 다룰 때에는 3가지만 알면 됩니다. i번째 필드 얻어 오기, i번째 필드 바꾸기, 새로 생성하기. 이 2가지를 먼저 알려드린 다음에 프로세스와 가희 문제에서 어떻게 적용될 수 있는지 보여드리겠습니다. 예제를 보면서 이해해 보도록 하겠습니다. 먼저, 새로 생성하는 것은 make_tuple로 하시면 됩니다. 8번째 줄을 수행하면, 대략적으로 요래 올라갈..
c에서 multiple token을 처리하기 위해서 strtok을 이용할 수 있습니다. 자바는 split 로 매우 간단하게 처리할 수 있습니다. 그리고 이 메서드는 정규 표현식을 이용합니다. c++에서는 어떻게 하면 좋을까요? 자바의 split가 정규 표현식을 쓴다는 것에 착안하시면 무엇을 써야 할 지 쉽게 알 수 있습니다. 문자열 s를 ,과 .를 구분자로 나누는 예제를 생각해 보겠습니다. 먼저, delimeter는 . 아니면 ,입니다. 따라서, 이를 정규 표현식으로 표현하면 [.,]입니다. 이것은 scan 집합이 . 아니면 ,라는 의미입니다. 그런데, 이들이 한 번 이상 나오면 어떨까요? 예를 들어, 문자열 ",,"이나, "..,"는 어떤가요? 이런 경우도 match가 되게 하려면 regex의 패턴이 ..
c++에서 string을 처리할 때, 구분자가 여러 개 붙어 있는 경우 split를 어떻게 할까요? c의 string.h에서는 strtok으로 된다고 하는데. 한 가지 방법 중 하나는, 문자열을 순회하면서, 해당 문자가 구분자인지 검사하는 것입니다. 제 목표는 token_ret 메서드를 구현하는 것입니다. 2번째 인자는 delimiter들을 넘깁니다. 쉽게 말해 구분자인데요. :과 -와 공백을 넘겼습니다. 이들을 기준으로 split 하겠다는 의미입니다. 실행 결과는 위와 같이 나와야 해요. 인풋이 이렇다고 해 봅시다. 양 끝단 처리가 어려울 듯 하니, 더미 2개를 넣읍시다. 하나는 문자열 시작 위치 바로 전인 -1, 다른 하나는 문자열의 끝인 size of string length를 넣을 겁니다. 이 둘..
최근댓글