제 코딩테스트 레포가 업데이트 되었습니다. stream 관련한 것도 있었고, 굳이 리스트 안에 있는 원소 갯수를 세는데 리스트 컴프리헨션에 len을 섞을 필요가 있냐는 피드백도 받았기 때문입니다. 예제 프로그램을 보겠습니다. 제 예전 21771번 풀이 코드는 요런 식이였습니다. 변경 이력을 봐도 알 수 있습니다. 무엇을 하는 것이냐면, 리스트 lt에서 k가 1인 것만 filtering을 해서 새로운 리스트를 만들고, 그 리스트에 있는 원소의 수를 세서 1의 갯수를 세는 것입니다. 결과는 3이 나옵니다. 의도한 대로 나왔으니 틀린 것은 아닙니다만, 문득 의문이 듭니다. 리스트 안에서 1의 개수를 세기 위해서 논리적으로 저렇게 많은 일이 필요할까요? 이 부분은 사실 잘 모르겠습니다. 대신에, 리스트에 있는 ..
List 검색 결과
c++에서 list는 insert되거나 delete 되는 위치를 알 수 있을 때, insert나 delete를 빠르게 하기 위해서 씁니다. erase를 했으니, c++ list의 insert함수를 알아보고 어떻게 사용하는지 간단하게만 알아봅시다. 먼저 예제입니다. int를 저장하는 리스트 my_list가 있네요. foo 함수는 리스트 내부에 있는 친구들을 향상된 for문으로 head부터 tail까지 순회합니다. 다음에 insert할 위치와 insert할 item을 받아서, 특정 위치에 아이템을 넣습니다. 연산이 일어날 위치를 알고 있다면, 넣는 것이나 제거하는 것이나 시간이 오래 걸리지는 않습니다. 물론 다른 용법도 문서에 언급되고 있기는 하지만, 저 같은 경우 백준에서 문제를 풀 때 1번째, 단일 원소..
안녕하세요. 이번 시간에는 c++ list의 erase 함수 사용법을 간단하게 알아봅시다. 이 함수는 범위 제거를 하거나, 원소 하나만 제거를 할 때 쓰이는데요. 보통 저는 전자보다는 후자의 용도로 많이 쓰곤 합니다. 사실 후자의 용도만 알아도 큰 문제 없기도 하고요. 예제를 보겠습니다. 먼저, 1, 2, 3, 4, 5를 순서대로 넣은 list가 하나 생성됩니다. 9번째 줄에, 리스트의 시작을 가리키는 이터레이터 iter를 리턴합니다. 그러면 iter는 1을 가리키게 됩니다. iter++을 하게 되면, 다음 원소를 가리키게 되는데요. 1 다음에 있는 원소는 2였으므로, 2를 가리키게 됩니다. 이 상태에서 (*iter)를 출력하면 2가 됩니다. 그 다음이 문제인데요. iter = my_list.erase(..
꽤 최근에 토이 프로젝트의 controller 코드가 조금 단순화 되었음을 볼 수 있습니다. 아직 리팩토링이 다 끝났다고 말 하기도 그렇지만. 사실 어제 리뷰를 받고 valid 어노테이션을 적용한 것이 조금 컸습니다. 변경 내역은 이 링크에서 보실 수 있습니다. 사실 문제의 발단은 사소한 테스트에서 출발하였습니다. 유저가 중복된 경우에 대해서 왜 내 프로젝트는 500을 떨어트릴까? 예외 처리가 느슨해 보였습니다. 그런데 마침 카톡방에서 리뷰어 분들이 제 프로젝트를 보시고, Bad request 부분을 처리하는 로직이 비대해 보인다면서, Valid 어노테이션을 써 보는 게 어떻겠냐는 조언을 주셨습니다. 먼저 dependencies에 Validation을 추가합니다. pom.xml에는 spring-boot-..
안녕하세요. 이 글에서는 List의 removeAll 메소드에 대한 질문이 와서 이에 대해 써 보도록 하겠습니다. 콜렉션에 대해서 입문하셨다면, clear와 혼동하기 매우 쉽습니다. 이 둘은 쓰이는 용도가 다릅니다. 어떻게 용도가 다른지, 정확한 복잡도는 어떻게 되는지 언급해 보겠습니다. list에 0부터 99999까지 추가합니다. 다음에, list m에도 0부터 99999까지 추가합니다. 다음에 removeAll 메서드를 호출하였습니다. 그러면 내부적으로 batchRemove 함수를 호출합니다. 일괄 처리할 때 그 batch입니다. 이로 미루어 보았을 때, Collection에 있는 삭제할 원소 하나 하나를 하나의 작업 단위로 보고 처리한다는 말이 되어 버립니다. 즉, 어떤 원소 m개를 삭제하려고 할 ..
최근댓글