목록공부 (77)
빠에야는 개발중
자바 8에서 추가된 큰 기능들 중 하나가 스트림 api이다. 스트림을 사용하면 컬렉션의 요소들의 연산을 쉽게 처리할 수 있다는 큰 장점이 있다. 스트림의 특징은 다음과 같다. 1. 스트림은 요소들을 보관하지 않는다. 필요할 때마다 스트림을 생성한다.2. 스트림은 원본 컬렉션을 변경하지 않는다. 새로운 스트림을 반환할 뿐이다.3. 스트림은 지연(lazy) 처리된다. 예를 들어 정렬을 수행할 때 도중에 결과값을 반환하게 된다면 전체 연산을 수행하지 않는다. 스트림은 또한 간단하게 병렬 처리를 구현할 수 있다. parallelStream()으로 스트림을 생성하면 스트림 라이브러리가 병렬로 연산을 수행한다.12long count = words.stream().filter(w -> w.length() > 12)...
numberOfPrime 메소드는 정수 n을 매개변수로 입력받습니다.1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하도록 numberOfPrime 메소드를 만들어 보세요.소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.)10을 입력받았다면, 1부터 10 사이의 소수는 [2,3,5,7] 4개가 존재하므로 4를 반환 5를 입력받았다면, 1부터 5 사이의 소수는 [2,3,5] 3개가 존재하므로 3를 반환 이 문제는 1. 1부터 n까지 각각 약수가 존재하는지 검사2. 에라토스테네스의 체 이렇게 두가지 방법으로 풀 수 있다. 1번 방법은 모든 경우를 다 해보는 방법이고 2번 방법은 그나마 계산 수를 줄이는 방법이다. 그래서 2번을 선택했다.123456789101112131..
롬복은 스프링에서 사용되는 라이브러리로, 어노테이션을 기반으로 반복적이고 따분한 작업들을 대폭 줄여주어 편하게 개발할 수 있게 도와준다. 대표적으로 Getter와 Setter 등이 있다. 한번 사용해보자. maven dependency를 설정해주는 것 만으로도 적용할 수 있다.123456 org.projectlombok lombok 1.16.8 providedcs 이제 적용된 코드를 살펴보자. 롬복을 적용하기 전에는 아래와 같이 길던 코드가..1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787..
Oauth는 요즘 자주 보이는 인증 방식이다. 네이버, 페이스북 등의 계정 정보를 활용한 인증 서비스를 제공하는 곳을 많이 보았을 것이다. 그렇다면 이런 인증 방식은 어떻게, 왜 사용하게 된 것일까? 어떤 시스템에서 외부 시스템에 접근하기 위하여 사용자의 계정 정보(아이디, 비밀번호 등)을 사용하는 것은 보안상 좋지 않다. 따라서 사용자의 인증을 받아 토큰을 발급 받으면 그 토큰 만을 사용함으로써 사용자의 계정 정보는 불필요하게 되어 보안을 유지할 수 있는 것이다. 추가적으로 사용자의 권한까지 조절할 수 있도록하면 서비스적으로 더 좋을 것이다. 이것이 Oauth의 기본 개념이다. Oauth 1.0a Outh는 현재 2.0 버전을 달리고 있는데, 먼저 등장한 1.0a 버전에 대하여 알아보자.(1.0a 버전..
행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬을 입력받는 sumMatrix 함수를 완성하여 행렬 덧셈의 결과를 반환해 주세요.예를 들어 2x2 행렬인 A = ((1, 2), (2, 3)), B = ((3, 4), (5, 6)) 가 주어지면, 같은 2x2 행렬인 ((4, 6), (7, 9))를 반환하면 됩니다.(어떠한 행렬에도 대응하는 함수를 완성해주세요.) 단순한 행렬의 덧셈 문제인데 처음에 정사각행렬만 생각했다가 틀려서 다시 풀다가 A.length가 높이값이라는 것을 알게 되었다. 이전에는 전체 요소 크기인줄 알고 있었는데 바로 잡아서 기분이 좋다. 123456789101112131415161718192021222324252627cla..
전자 서명 전자 서명이란 어떤 데이터가 정말 그 사람 것이 맞는지를 보장해주는 것이다. 이 때 비대칭키(공개키) 암호화 기술이 사용된다. 어떤 사람 A가 자신의 비밀키를 사용하여 원본 데이터의 해시값을 암호화(서명) 한다. 그 후에 믿을 수 있는 기관 B에 A의 공개키를 배포한다. 그러면 믿을 수 있는 기관 B는 자신의 비밀키로 A의 공개키를 서명하고, A의 주체 정보와 B의 공개키 등을 담아 인증서를 만들어 배포한다. 그리고 A는 이 인증서와 함께 원본 데이터와 원본 데이터의 해시값을 서명한 데이터를 합쳐 배포한다.(이를 “코드사인”이라고 한다.) 기관 B를 믿을 수 있는 사용자 C는 코드사인된 데이터를 받아 인증서 안에 들어있는 B의 공개키를 이용하여 A의 공개키를 얻어낸다. 이 A의 공개키로 서명된..
해싱 해싱 어떤 데이터를 작은 크기의 데이터로 변환하여 테이블에 담는 데이터 관리 기법이다. 해싱을 사용하면 데이터를 빠른 속도로 검색할 수 있다는 장점이 있다. 그리고 이 해싱은 암호화, 복호화의 개념과 만나 전자서명에도 사용이 된다. 해시 함수 해싱을 하는 방법은 다양하게 존재한다. 임의로 어떤 데이터를 변환 하겠다고 정했다면 그 방법이 바로 해시 함수가 되는 것이다. 예를 들어 “문자를 한칸씩 뒤로 옮기는 변환”이라는 해시 함수를 생각했다면, “ABC”라는 문자는 “BCD”가 되는 것이다.(예시에 불과하며, 속도적 이득은 거의 없다고 볼 수 있다.) 해시 함수는 보통 원문을 단방향으로 해싱하는 용도로 쓰이며 역방향으로 원문을 알아내는 방법은 계산상 불가능해야 좋은 해시 함수라고 할 수 있다. 충돌 ..
다이나믹 프로그래밍은 “큰 문제를 작은 문제로 나누어 푸는 알고리즘”이다. 하지만 단순히 나누는 것이 다가 아니라, 두가지 조건을 만족해야만 다이나믹 프로그래밍으로 문제를 푼다고 할 수 있는데, 그 두가지는 Overlapping subproblem (겹치는 부분 문제) Optimal substructure (최적 부분 구조) 이다. Overlapping subproblem 겹치는 부분 문제란, “큰 문제를 작은 문제로 쪼갤 수” 있어야 하고, “큰 문제와 작은 문제를 같은 방법으로 풀 수” 있어야 한다는 것이다. 피보나치 수를 예로 들자면 f(0) = 0 f(1) = 1 f(n) = f(n-1) + f(n-2) 이런 식에서 f(n)을 구하는 문제는 다시 f(n-1)을 구하는 문제와 f(n-2)를 구하는 ..
reverseStr 메소드는 String형 변수 str을 매개변수로 입력받습니다. str에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 String을 리턴해주세요. str는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 예를들어 str이 Zbcdefg면 gfedcbZ을 리턴하면 됩니다. 이 문제는 "대문자가 소문자보다 작다"라는 조건이 붙어있지만 기본적으로 대문자의 코드값이 소문자보다 작기 때문에 그냥 sort() 메소드로 정렬하고 reverse해주면 되는 문제이다. 만약 우선순위가 반대였다면 toUpperCase(), toLowerCase()로 대소문자를 서로 바꿔주면 된다. 123456789101112131415import java.util.Arrays; pu..
문제 출처 : Baekjoon Online Judge 2251번 "물통" - https://www.acmicpc.net/problem/2251 완전 탐색 강의를 들으면서 접한 문제이다. 이러한 종류의 탐색 문제를 푸는 방법은 n중 for문, 큐, 순열, 재귀, 비트마스크 등이 있는데, 이번에는 큐를 사용한 bfs로 문제를 풀었다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610..