귀납법은 이산 수학 시간에 들어보셨을 증명 방법입니다. 어떻게 쓰는지, 백준에 있는 문제를 풀어보도록 하겠습니다. 최근 USACO 실버에 나온 문제라고 하는데, 실버 같지 않습니다. 문제를 요약하면, 길이가 n인 순열이 주어집니다. 1부터 n까지의 수가 1번 등장합니다. 그리고 m개의 웜홀 정보가 (a, b, c)로 주어지는데, 너비가 c인 웜홀을 열면 a번째 원소와 b번째 원소를 바꿀 수 있다는 의미입니다. 어떻게 잘 배치해서 순열을 오름차순으로 정렬하려고 할 때, 연 웜홀들의 최소 너비를 최대화 시키는 문제입니다. 이걸 보면, 일단 이분 탐색임을 알 수 있는데, 정렬이 되어야 하는 조건이 상당히 어렵습니다. 어떻게 해 볼 것인가. 작은 집합부터 보면서, 큰 집합에서 성립하는지 보아야 겠습니다. 귀납법..
분류 전체보기 검색 결과
예전에 ifnull 함수를 배운 적이 있었습니다. null이면 A로 처리하더라. 이런 플로우였습니다. 반대로, nullif 함수가 있습니다. 이것은 반대로 B이면, null로 처리하게끔 할 때 씁니다. 어떤 플로우인지 잠깐 언급을 드리고, 예제를 간단하게 보겠습니다. 먼저, expr1 = expr2가 참이라면, true이니 이 때에는 null을 돌려줍니다. 그렇지 않으면, expr1을 돌려줍니다. 생각보다 복잡하지 않아요. 그러면, 학점 score가 'F'라면 null 처리를 하겠다. 고 하면 어떻게 하면 좋을까요? nullif의 플로우는 위와 같아요. 우리가 리턴해야 하는 값은 score입니다. 그러니, expr1에는 score가 들어가야 합니다. 다음에, expr2에는 'F'가 들어가야 겠네요. 즉,..
백준 문제를 파이선으로 풀 때, 많이 써먹는 함수 중에 하나는 split입니다. 이 함수에 대해 간단하게 알아보겠습니다. 먼저, input은 입력 받은 것을 str로 리턴해 줍니다. 우리가 python으로 ps를 할 때, input().split()를 많이 써먹습니다. 예를 들자면 아래와 같이 입력이 들어왔을 때입니다. 이것은 공백을 기준으로 나누어진 예입니다. 100, 100을 받으려면, 1번째 줄을 통째로 입력받고 그것을 공백을 기준으로 나눠야 합니다. 이 때 써먹을 수 있는 메서드는 built in 함수인 split 입니다. 사용 용례를 보겠습니다. 결과 먼저 보면, ab-cd-ef로 입력을 받아서, output으로 내놓은 것은 ['ab', 'cd', 'ef'] 입니다. 즉, 무언가를 기준으로 나누..
setter나 getter는 엄청나게 쓰는 메서드들이기도 합니다. 그런데, 문득 setter는 왜 사용을 지양해야 한다고 할까? 에 대해서 곰곰히 생각해 보게 되었습니다. 사실, 이 질문에 대해서, 명확하게 떨어질 만한 답을 찾지 못하였습니다. 대신에, 외부에서 세터 를 호출해서, 변경이 되면 위험한 속성들에 대해서 다시 생각해 보게 되었습니다. 그에 대한 답 부터 해 보도록 하겠습니다. setter는 객체의 속성을 변경하는 메서드입니다. 예를 들자면 Dog라는 모델이 age와 이름을 가지고 있을 때, setName은 이름을 바꿔줄 때 쓰고, setAge는 나이를 바꿔줄 때 쓰입니다. 굳이 이들의 존재에 대해서 잘 모르더라도, Collections를 보시면 쉽게 찾을 수 있습니다. 예를 하나 들어보겠습니..
면접 질문들을 모아놓은 레포를 보다 보면, 싱글톤 패턴은 많이 언급한다는 것을 알 수 있습니다. 거기서 DCL 패턴이 나오고, volatile도 나오는데요. 여기서 volatile이 무엇을 의미할까요? 먼저, 간단하게 프로그램을 작성해 보겠습니다. Main 스레드와 Worker1 스레드 하나가 있습니다. 이 프로그램은, Main Thread에서 w1의 stop flag를 중간에 true로 셋팅합니다. Worker1의 run 메소드는 그냥 stop flag가 false이면 계속 돕니다. 결과가 어떻게 나올까요? 공교롭게도, 0 : stop flag만 출력하고 더 이상 진행되지 않습니다. 이는 왜 그럴까요? 공식 문서를 보면 자세히 알 수 있습니다. Note 바로 윗 단락의 내용을 천천히 봅시다. 일단, w..
최근댓글