7월 18일에 제가 운영한 2회 코딩테스트가 열렸습니다. 이 중에, 1번 문제는 다중 정렬을 이용한 문제였습니다. 백준에서 정렬 분류로 치면 나오는 문제들을 풀 수 있다면 풀 수 있게 해서 그런지, 정답자 수가 많은 편에 속하는 문제가 되었습니다. 그 이후에도 사람들이 꾸준히 많이 풀어주셨는데요. 저는 name과 확장자, os에서 확장자를 인식하는지 여부를 3개의 플래그로 만들어서 관리했습니다. 그런데, 다른 분이 Comparator와 람다를 잘 이용하면, 코드도 줄일 수 있고, 단순화 된다는 조언을 주셨습니다. 먼저, myFile 클래스를 보겠습니다. name과 ext만 필드에 있습니다. 생성자는 name과 ext를 받아서, 확장자와 네임을 생성이 될 때 채워넣습니다. 그 이후로 setName, set..
전체 글 검색 결과
이번 시간에는 파이썬의 setrecursionlimit에 대해 알아봅시다. 설명을 보시면, 딱히 어렵지는 않습니다. 인터프리터의 maximum stack depth를 늘려줍니다. 스택 트레이스 할 때 그 뎁스를 의미합니다. 이 뎁스는 재귀 호출과 관련이 깊습니다. 예를 들어, 20000번째 피보나치 수를 M으로 나눈 결과를 재귀함수로 구한다고 생각해 봅시다. 메모이 제이션까지 적용한다면 위와 같이 구할 수 있습니다. dp[x]가 -1이 아닐 때에는 그냥 dp[x]를 리턴해 주고, 아니라면 x-1번째 피보나치와 x-2번째 피보나치를 더한 다음에 M으로 나눈 나머지를 리턴합니다. 그런데, RecursionError가 뜹니다. 이는, depth가 너무 많이 깊어져서 smash가 나지 않게 하기 위해서입니다. ..
저번에 bcrypt을 해서, 패스워드를 hashing 하는 것을 썼습니다. 이전 글에서 올려놨던 것과 비교하면 달라진 것이 딱 하나 있습니다. 인자가 하나 추가되었다는 점입니다. String pw 말고도, len을 받는 것이 하나 추가되었는데요. 이것은 strength를 받기 위해 쓰였습니다. 예를 들어, 이 값이 15라면 32768 round, 32768번 반복을 의미합니다. 17이라면 2^17인 131072번 반복을 의미합니다. 당연하게도, len에 지수 비례합니다. 이것은 어렵지 않게 postman 등으로 테스트 했을 때 나옵니다. 이렇게, strength를 정해 준 다음에는, 암호화된 패스워드와, 넘겨준 패스워드를 비교해서 match가 되면 accept를 떨어트려 주고, 그렇지 않으면 wrong을..
Bcrypt를 써먹기 위해서, 스프링 시큐리티 dependencies를 추가하였습니다. 이렇게 추가하고, 프로젝트 껍데기 zip 파일을 다운로드를 받아 봅시다. controller하고 application.properties만 조금 바꿔 보겠습니다. server.port는 7780으로 바꿉니다. 그리고, GET /를 받는 test 메소드를 작성했습니다. 별 다른 것은 없고요. 9번째 줄에서, "abcde"를 BCryptPasswordEncoder로 암호화 시킵니다. 다음에, 10번째 줄에서, encoder.matches로 get 파라미터로 날라온 pw와 encrypted_pw가 같은지 비교하게 됩니다. 만약에, 이 두 결과가 같다면 accept를 리턴하고, 아니라면 wrong을 리턴합니다. API는 매우..
저번 시간에는 notepad++를 이용해서, diff를 사용해 보는 것이였습니다. 이번에는 여러 패턴들을 찾고 한번에 바꾸는 것도 해 보도록 하겠습니다. 당연하게도, 패턴들을 찾는 것이니, 공식 문서의 이 부분이 유용할 듯 싶네요. 먼저 CR LF부터 보도록 하겠습니다. 리눅스하고, 윈도우하고 개행 처리 방식이 다릅니다. 윈도우는 LF 앞에 CR이 붙는데, 리눅스는 그렇지 않습니다. 기호 보기에서 특수 문자 표시에 체크를 해 주겠습니다. 그러면 1 뒤에 CR LF가 있고, 2 뒤에 또 CR LF가 있어요. CR은 캐리지 리턴이라 합니다. \r로 표현이 됩니다. 이것이 몇 개나 있는지 찾고 싶습니다. 찾기에서 찾기 모드를 정규 표현식을 선택해 줍시다. 그 다음에 \r\n을 입력하고 일치하는 개수를 누르시면..
최근댓글