본문 바로가기

전체 글

(96)
[코딩테스트] 최대공약수, 최소공배수 구하기 (유클리드 호제법) 코딩테스트를 풀다보면 간간히 최대공약수, 최소공배수와 관련된 문제를 찾아볼 수 있다. 수학에 익숙하지 않은 사람이면 '최대공약수', '최소공배수'라는 워딩에서 주는 생소함에 부담을 가질 수도 있다. 하지만 코테 사이트에서 이와 관련된 문제를 꽤나 낮은 난이도의 문제로 취급하고 있는 만큼, 생각보다 어렵지 않은 개념이라 볼 수 있다. 최대공약수(GCD) 구하기 최대공약수는 유클리드 호제법을 이용하여 구할 수 있는데, 이는 큰 수를 작은 수로 나눈 나머지를 반복적으로 취하여 나머지가 0이 될 때 까지 작동하여 구하는 방식이다. 1. 재귀 방식으로 구현 // 재귀 방식 public static int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b..
[코딩테스트] label을 이용하여 다중 반복문 탈출하기 백준 2309번 일곱난쟁이 문제를 풀면서 이중 for문을 빠져나오게 코드를 작성해야하는 일이 있었다. 2중 for문 또는 다중 for문을 사용할 때, 안쪽에있는 for문에서 조건에 부합할 때 한번에 상위 for문까지 빠져나오는 법에 대해 머리를 굴려보다 찾아낸 기능이 바로 label이었다. 그래서 오늘은 label에 대해서 소개하고자한다. Label이란 label은 앞서 말한 것과 같이 다중 for문을 사용할 때 안쪽 for문에서 전체 루프를 즉시 종료하거나 다음의 큰 반복문으로 이동할 때 사용할 수 있다. 코드 예제 * 기본형태 outerLoop: // 외부 루프에 레이블 지정 for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (i * ..
[Java] Stream Stream이란 Stream은 자바 8에서 추가된 컬렉션, 배열, I/O 자원 등의 데이터 소스를 처리 방법으로, 데이터의 흐름을 추상화하여 다양한 처리를 지원한다. Stream은 데이터 소스를 변경하지 않기 때문에 Stream으로 처리한 결과는 원본 데이터에 영향을 미치지 않는다. Stream은 지연(lazy)처리를 지원하기 때문에 Stream으로 처리한 데이터는 실제로 필요할 때 까지 계산되지 않고 필요한 시점에서 계산된다. 이러한 Stream을 사용했을 때 얻을 수 있는 가장 큰 장점은 간결하고 가독성이 좋은 코드로 작성이 가능하다는 점이다. int[] numbers = {1, 2, 3, 4, 5}; int[] result = new int[numbers.length]; int index = 0; ..
[Spring] AOP AOP(Aspect Oriented Programming)란 AOP(Aspect Oriented Programming)는 OOP(Object Oriented Programming)에서 발생하는 문제 중 하나인, 관심사의 분리를 해결해주는 프로그래밍 패러다임이다. 관심사의 분리란, 비즈니스 로직 외에 로깅, 보안, 트랜잭션과 같은 부가적인 기능이 필요할 때 이를 모든 메소드마다 일일이 추가하게 되면 코드가 중복되고 유지보수성이 떨어지기 때문에, 부가적인 기능들을 한 곳에서 관리하고 필요한 메소드들에 일괄적으로 적용하는 것을 얘기한다. 위 그림에서 Class A, Class B, Class C는 저마다 부가적인 로직(색깔 블록)이 중복되고 있다. 이때 중복되는 소스코드으로 인해 소스코드가 비대해 질 뿐만 아..
[Spring] @Valid @Validated와 유효성 검사 Annotation @Valid @Validated란 @Valid와 @Validated는 서버 사이드에서 유효성 검사를 하기 위해 자바 및 스프링에서 제공하는 어노테이션이다. @Valid는 javax.validation.constraints 에서 지원하는 어노테이션으로 valid조건들을 검증하고, 유효성 검사에 부합하지 않는 문제 발생 시MethodArgumentNotValidException를 발생시킨다. @Validated는 스프링에서 지원하는 어노테이션 기능으로 @Valid와는 몇가지 차이점이 있다. 먼저, 컨트롤러(핸들러)계층에서만 동작하는 @Valid와는 달리 @Validated는 서비스등 컨트롤러뿐만 아니라 다른 계층에서도 유효성 검사를 할 수 있게끔 해준다. (@Valid는 핸들러 어탭터 처리과정인 Argume..
[Java] toString()과 String.valueOf() 차이점 toString()과 String.valueOf()는 주로 Object값을 String형으로 형변환할 때 주로 사용하는 메소드들이다. 차이점 두 메소드의 차이점은 바로 null값에 따른 NullPointException 발생의 유무이다. toString() : null 값을 형 변환 시 NullPointerException(NPE)이 발생 / Object의 값이 String이 아니여도 출력 String.valueOf() : 파라미터로 null이 오면 "null"이라는 문자열을 출력 코드 예시 public static void main(String args[]) { Object obj = null; System.out.println(obj.toString()); // NullPointerException ..
[Java] 배열 자르기 배열 자르기 오늘은 자바에서 배열이 하나 주어졌을 때 시작 인덱스와 마지막 인덱스 범위만큼 배열을 자르는 방법을 소개하고자 한다. 예를 들어 1부터 10까지 값을 가지는 배열에서 시작 인덱스를 3으로, 마지막 인덱스를 7로 주어 다음과 같은 결과를 얻고자 한다. 기존 배열 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 시작 인덱스 : 3 마지막 인덱스 : 7 특정 범위의 배열 : [4, 5, 6, 7] 1. System클래스의 arraycopy 메소드 System 클래스에서 제공하는 arraycopy() 메소드를 활용하여 특정 위치부터 특정 개수만큼 새로운 배열에 값을 할당할 수 있다. System.arraycopy(A, B, C, D, E); 매개변수 A : 원본 배열 B : 원본 배열에..
[Git] commit목록에서 workspace.xml 파일 제거하기 intellij와 github를 연동하여 프로젝트를 진행하던 중 commit을 할 때마다 workspace.xml파일이 함께 Changes 목록에 올라와 workspace.xml파일을 gitignore에 추가해야 할 일이 생겼다. 하지만 workspace.xml파일이 이미 깃허브 레파지토리에 올라가 있는 상황이라 gitignore에 추가하여도 자꾸만 올라가는 문제가 발생하였다. 해결방법을 찾아본 결과 git bash를 이용하여 작업하여 문제를 해결할 수 있었다. 해결 1. 깃허브와 연동되어있는 프로젝트 디렉토리에 접근한다. (.git파일이 있는 폴더) 2. 폴더 내부에서 마우스우클릭하여 git bash를 킨다. 3. git Bash Here 클릭 4. 아래의 커맨드 입력. mv .idea ../.idea..