삽질방지

    [python3] 행렬 다루기 (zip, *, 행렬)

    [python3] 행렬 다루기 (zip, *, 행렬)

    코테를 풀다보면 [[1,2] [3,4]] 를 [[1,3] [2,4]]로 바꾸고 싶을때가 있다. 물론 코딩을 통해 하나씩 옮겨주는 방법도 있지만 문제는 이런 사소한 부분들을 신경쓰다보면 이상하게 말리는 경우가 생긴다는 것이다. python 행렬 전치를 구글링하면 numpy를 사용하여 전치하는 예시들이 나오는데, 코딩테스트에서는 이런 외부 라이브러리를 사용하지 못하는 경우가 발생한다. 이때를 대비하기 위해 행렬을 다루는 방법을 알아본다. 행렬 전치하기 a = [ [1,2] , [3,4] ] b = list(zip(*a)) for tmp in b: print(tmp) # (1,3) # (2,4) zip(*배열) 을 사용해주면 간단히 행과 열을 바꿔줄 수 있다. 행렬 회전하기 방금 우리는 zip을 통해 행렬을 ..

    [python3] 문자열 형변환 (int, float, str, chr, ord)

    [python3] 문자열 형변환 (int, float, str, chr, ord)

    코테를 하다가 갑자기 아스키코드에서 숫자로 변환하는 함수를 까먹어서 상당히 애를 먹었다. 이참에 정리를 해서 명확하게 해보자 int() int() 의 경우 문자열(숫자(정수만)), 실수, bool 을 정수로 변환해준다. float() float()의 경우 문자열(숫자), 실수, bool을 실수로 변환해준다. str() str()의 경우 모든 입력값을 문자열로 변환한다. chr() chr()의 경우 입력값을 문자로 변환시킨다. 이때 아스키 코드에 따라 변환되기 때문에 아스키 코드를 넣으면 문자로 변환된다. 주로 코테에 많이 쓰는거 같다. ord() ord()의 경우 chr()와 반대로 문자를 아스키코드값으로 반환한다. 따라서 'a'를 넣으면 아스키코드값인 97을 반환한다. 단, 아스키 코드에 존재하는 값만..

    spring builder 오류 (error: cannot find symbol final .......)

    spring builder 오류 (error: cannot find symbol final .......)

    TDD기반의 api설계를 따라하던중 아래와 같은 에러가 떴다. 멤버쉽 객체에 @Builder를 포함시켰음에도 이러한 에러가 떴다. 그래서 검색도중 찾아보니 Gradle로 라이브러리 관리를 한 경우 Test영역에서의 annotation이 적용되지 않아서 그렇다고 한다. 기존에는 build.gradle에 annotationProcessor만 존재했지만 testAnnotationProcessor를 새롭게 추가해주었다. 아마도 어노테이션 사용을 명시해주어야 test영역에서 어노테이션을 사용가능한거 같다. annotationProcessor('org.projectlombok:lombok') testAnnotationProcessor('org.projectlombok:lombok') 결과적으로 잘 적용되었다.

    [python3] binary string to integer, integer to binary string

    def intToBin(val): # 정수값을 bin함수로 바꾸면 bin(4) => '0b100' 앞쪽에 0b가 붙어서 나오므로 이걸 제거해준다. return bin(val)[2:] def binToInt(strval): # "100" => 4가 된다. int함수의 두번쨰 인자를 2로 놓으면 바이너리, 16으로 놓으면 16진수 값으로 변경된다. return int(strval, 2)

    파이썬 재귀 제한 풀기

    import sys sys.setrecursionlimit(10 ** 6) sys 모듈에서 setrecursionlimit함수 인자로 원하는 재귀횟수 만큼 풀어주면된다. 주로 DFS나 BFS문제를 풀때 사용 한다.

    정규표현식

    정규표현식

    * 단어 찾기 단어를 찾으려면 그냥 단어를 입력하면 끝이다. * 해당 단어 제외하고 모두 찾기 \b(?!\bto\b)\w+\b \b word boundary를 표현하며 문자와 공백 사이의 문자를 의미 ?! 거짓인 것을 찾는다. \bto\b word boundary 안에 존재하는 to를 의미 \w+ \w는 [0-9a-zA-Z]를 의미하며 +는 1번이상 반복을 의미 \b 다시 word boundary를 의미 ⇒ \b의 word boundary는 단어의 시작이나 끝을 의미한다. 여기서 재밌는 점은 경계를 가리킨다는 점이다. 따라서 단어의 끝,시작의 경계에 \b가 매칭된다. * 전화번호 전화번호는 XX(X)-XXX(X)-XXXX 로 구성된다. 따라서 숫자와 -를 잘 구성하면 된다. ^[0-9]{2,3}-[0-9..

    [c++] ios::sync_with_stdio(0), cin.tie(0) 는 왜 쓰는 걸까?

    ios::sync_with_stdio(0)는 c의 stdio와 cpp의 iostream을 동기화 시켜준다. 문제는 iostream과 stdio의 버퍼를 모두 사용하기 때문에 딜레이가 발생한다. 따라서 이러한 동기화를 비활성화 시켜주기 위해 ios::sync_with_stdio(0)으로 선언해준다. cin.tie(0)는 cin과 cout의 묶음을 풀어준다. 따라서 순서가 사라진다. 알고리즘을 풀때는 화면에 바로 보이는 것이 중요하지 않기 때문에 cin과 cout의 묶음을 풀어주어 더 빠르게 만들 수 있다. 아래는 고수님의 상세링크 https://jaimemin.tistory.com/1521

    [c++] \n 와 endl 중에는 \n가 더 빠르다.

    이번에 삼성SDS알고리즘 특강을 듣게 되며 C++을 활용한 코딩을 공부하고 있다. 강사님이 endl보다는 "\n"가 더 빠르다고 했다. endl의 경우에는 내부에서 flush()를 포함하기 때문에 출력버퍼를 지워주는 과정을 포함한다. 그렇다 보니 출력시에 "\n"보다 속도가 느려진다. 타 블로그를 확인해보니 "cout