분류 전체보기

    [python3] 백준 1939 풀이 ( 중량제한, MST, 유니온 파인드 )

    [python3] 백준 1939 풀이 ( 중량제한, MST, 유니온 파인드 )

    문제를 읽어보면 생각보다 간단하다. 여러개의 섬으로 이루어진 나라가 존재한다. 그리고 2개의 공장이 각 섬에 하나씩 존재한다. 섬들은 서로 중량제한이 있는 다리로 이루어져있다. 따라서 중량제한을 넘지 않고 다리를 건너서 한공장에서 다른 공장으로 물품을 이송해야한다. 이때 공장A에서 공장B로 갈때 얼마나 많은 물품을 한번의 이동시 옮길 수 있는지 출력해야한다. 여기까지 읽고나면 그래프 문제라는 감이 온다. 그런데 A공장에서 B공장까지 가야하기 때문에 여러개의 경로가 존재한다.문제는 다리개수가 100,000개이기 때문에 완탐으로 푸는 미친짓을 해서는 안된다. 천천히 고민해보자 우선 다리를 건너는 비용은 문제가 되지 않는다. A->B로 가기만 하면되고 이때 건너는 다리의 중량한계의 최솟값이 가장 큰 경로를 찾..

    [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을 반환한다. 단, 아스키 코드에 존재하는 값만..

    [python3] 백준 1339 풀이 ( 단어 수학, 그리디 )

    [python3] 백준 1339 풀이 ( 단어 수학, 그리디 )

    이 문제는 상당히 헤맸다. 결국 1시간내에 풀지 못해서 질문을 찾다보니 좋은 접근 방법이 있어서 그걸 토대로 푸니 금방 풀렸다. 길이가 최대 8인 문자열이 최대 10개가 주어진다. 각 알파벳은 숫자를 의미하는데 숫자를 대입하여 모든 문자열의 총합을 구하면 된다. 예를 들어 AB + A의 최대값은 98+9 = 117로 나타낼 수 있다. 그럼 간단한 규칙을 찾아낼 수 있다. 1. 가장 앞에 있는 문자열일수록 큰수를 대입해야한다. 2. 많이 나올수록 큰수를 대입해야한다. 그런데 이렇게 정리하면 삽질을 하게 된다. 한마디로 짧게 생각하면 스스로 함정에 빠지는 거다. 그냥 간단하게 AB -> A*10+B*1, B-> B*1 AB+B -> A*10 + B*2 가 된다. 따라서 이걸 그대로 해주면 어떤 값이 가장 크..

    [JPA강의] 1주차 강좌 소개, JPA 소개, JPA 시작하기

    [JPA강의] 1주차 강좌 소개, JPA 소개, JPA 시작하기

    간략 JPA 소개 예전에는 sql을 한땀한땀 작성을 해야했다. 그런데 이제는 sql을 직접 만들 필요가 없어졌다. 바로 그것이 JPA JPA는 자동화의 끝판왕이다. 그래서 JPA는 트랙터 같은 놈이다. 문제는 운전을 하려면 사용법을 알아야한다. 그런데 실무에서는 사용하기 어렵다. 객체와 테이블을 올바르게 매핑하고 설계하는 방법을 몰라서 ⇒ 삽질이 길어진다. JPA 내부 동작 방식 이해를 몰라서 ⇒ 원하는 방식대로 동작하지 않는다. SQL 개발의 문제점 기존 개발방식은 SQL에 의존한 개발이 주를 이룬다. 필드를 하나 추가해도 상당히 많은 양의 코드를 변경해야한다. 혹은 놓치는 코드가 생긴다. ⇒ SQL 의존적인 개발을 피하기 어렵다 패러다임의 불일치 객체지향 → 추상화, 캡슐화, 은닉화 등등을 위해 존재..

    [Java] static과 final의 차이가 뭘까?(feat. JVM 메모리)

    [Java] static과 final의 차이가 뭘까?(feat. JVM 메모리)

    Static static은 고정된 이라는 뜻이다. 메모리를 공유하여 사용하기 때문에 필요할때 바로바로 호출하거나 데이터를 가져올 수 있게 된다. 즉, 객체 생성없이 사용할 수 있는 필드와 메소드를 생성하고자 할 때 활용한다. 공용데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메소드를 선언하고자 할 때 이용한다. Final final은 최종적인 이라는 의미이다. 즉, 해당 변수는 값이 저장되면 최종적인 값이 되므로, 수정이 불가능하다는 의미이다. 주로 상수로 변수를 사용하기 위해 사용하거나 오버라이딩을 막기 위해 사용한다. 만약 클래스에 final을 사용하면 상속을 막아준다. 따라서 변수, 함수, 클래스의 명시적 제한을 나타내기 위해 사용하며, 이를 통해 다양한 팀 협업시 코드의 가독성을 높여주는 효과..

    [python] 코테 대비 알고리즘 모듈 정리

    정렬 arr = [(1,2),(2,3), (1,1)] arr.sort() # 일반적으로 처음인자부터 차례로 정렬 nlogn arr.sort(key=lambda x:x[1],x[0]) # 두번째 인자 우선순위로 정렬 arr.sort(key=lambda x:x[0], reverse=True) # 첫번째 인자 기준으로 반대로 정렬 곱집합, 조합, 순열 from itertools import product product([1,2,3],['a','b','c','d']) # 하나씩 선택하는 모든 케이스(곱집합)가 만들어진다. from itertools import combinations combinations(iterable, r=None) # 조합 구하기 from itertools import permutatio..

    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] 프로그래머스 외벽 점검 ( 2020 KAKAO BLIND RECRUITMENT, level3, 완전탐색, 순열 )

    [python3] 프로그래머스 외벽 점검 ( 2020 KAKAO BLIND RECRUITMENT, level3, 완전탐색, 순열 )

    일단 문제 설명에 앞서 너무 어려웠다. 어려워서 짜증이 치밀어 오르다가 여러 사람의 풀이를 참고해보고 스스로 풀기를 반복하여 겨우겨우 풀었다. 문제를 읽어보면 크게 별게 없다. 취약한 지점이 존재하고 최대한 적은 친구들을 사용하여 취약한 지점을 점검하고 오는 것이다. 이때 사용된 친구들 수의 최솟값을 구하면 된다. 그런데 문제는 어디에서 시작해야할지, 어떤 친구를 투입할지 여러가지 고민이 필요하다. 처음에는 그리디 냄새가 났다. 어떤 취약한 지점을 고르고 가장 이득이 큰 부분을 선택하는 방식으로 진행하려고 했지만 기준을 만드는게 어려웠고 어떻게 구현을 해야하나 고민되었다. 그런데 n은 200이하이고, weak배열은 15이하, dist배열도 8이하였다. 그렇다면 완전 탐색으로 모든 경우를 해볼수도 있겠다는..