개발 블로그
article thumbnail
2138번. 전구와 스위치
Algorithm/백준 알고리즘 2023. 10. 3. 09:44

아이디어 i 번째 스위치를 누를 것인가 말 것인가는 i - 1번째 전구의 상태가 어떤가에 따라 결정된다. i - 1 번째 전구의 상태가 만들고자 하는 전구의 상태와 동일하다면 i 번째 스위치를 누르면 안 되고 i - 1 번째 전구의 상태가 만들고자 하는 전구의 상태와 다르다면 i 번째 스위치를 눌러야 한다. 다만 가장 첫 번째 전구는 i - 1 번째 전구가 없기 때문에 가장 첫 번째 전구의 스위치를 누르지 않고 시작하는 케이스와 누르고 시작하는 케이스를 구분하여 2 가지 케이스에 대해 위의 규칙을 적용한다. 마지막 전구의 스위치까지 결정짓고 난 후에는 가장 마지막 전구의 상태가 만들고자 하는 전구의 상태와 동일한지 확인하여 가장 최소 회수를 구하면 된다 ※ 0 ~ N -2 번째까지의 전구를 확인하지 않는..

article thumbnail
1025번. 제곱수 찾기
Algorithm/백준 알고리즘 2023. 10. 3. 09:16

아이디어 N 행 M 열의 표 A 에서 임의의 i, j 좌표를 기준으로 가로 방향 공차와 세로 방향 공차를 설정해서 숫자를 만들고 해당 숫자가 완전제곱수인 경우 이전의 결과값과 비교해가며 더 큰 수로 갱신하는 방법을 사용하면 된다. 이 때 공차는 음수도 가능하기 때문에 가로 방향 공차와 세로 방향 공차의 범위는 아래와 같다. 세로 방향 공차 : -N < d1 < N 가로 방향 공차 : -M < d2 < M 숫자 하나를 택하고 여기에 다음 숫자를 택해서 이어 붙이는 것은 (이전 숫자 * 10 + 다음 숫자) 식을 이용하면 된다. 완전제곱수인지 여부는 해당 숫자의 제곱근을 int 타입으로 변환했을 때 값이 그대로인지를 체크하는 것을 통해 알 수 있다. 풀이코드 import java.io.BufferedRead..

article thumbnail
산술 변환
Java 2023. 9. 19. 14:15

산술 변환이란? 이항 연산자는 두 피연산자의 타입이 일치해야 하는데 이 때 자동으로 형변환되는 것을 '산술 변환'이라고 한다. 산술 변환의 규칙에는 1) 작은 타입을 큰 타입으로 변환하여 타입을 일치시킨다 2) int 보다 작은 타입의 경우 int 타입으로 변환한다 가 있다. 산술 변환과 관련해 주의할 케이스 overflow 이항 연산자 중 대입 연산자도 산술 변환이 발생한다 long l = 3 + 5; 3 + 5 는 int + int 이므로 그 결과값도 int 인데 long 타입인 l 에 할당할 때는 long 타입으로 자동 변환이 일어난다. 이 때 주의해야할 점은 우변의 결과값은 기본적으로 int 라는 점이다. int i1 = 1000000; int i2 = 2000000; long l1 = i1 * ..

article thumbnail
비트 연산자(<<, >>, &, |, ^, ~)
Java 2023. 9. 19. 13:04

비트 연산자란? 비트 단위의 연산에 사용되는 연산자 비트 연산자의 종류 산술 연산자() a > b : 2진수 a 를 b 비트 만큼 오른쪽으로 미는 연산 int x = 7; System.out.println("x > 2 = " + (x >> 2)); // 0111(2) -> 0001(2) : 1 논리 연산자(&, |, ^, ~) & : 두 비트가 모두 1일 때만 1 | : 두 비트 중 하나라도 1이면 1 ^ : 두 비트가 서로 다르면 1, 같으면 0(xor 연산) ~ : 비트를 반전시키는 부정 연산자(1 -> 0, 0 -> 1) int a = 8; // 01000(2) int b = 17; // 010001(2) System.out.println("a & b = " + (a & b)); // 000000(..

스프링 컨테이너(Spring Container)에 대해 설명해주세요
기술 면접 질문 2023. 7. 24. 12:57

스프링 컨테이너는 스프링에서 자바 객체들을 관리하는 공간을 의미하며 스프링 컨테이너에 의해서 관리되는 자바 객체를 '빈'이라고 부릅니다. 스프링 컨테이너를 통해서 객체의 생성/주입/관리 등을 개발자가 아닌 스프링 프레임워크가 담당하게 되므로 IoC 컨테이너라고 부르기도 합니다. 스프링 컨테이너는 최상위 인터페이스인 BeanFactory 와 이를 상속하여 부가 기능을 추가한 ApplicationContext 인터페이스를 구현하고 있습니다. BeanFactory 인터페이스에는 빈의 등록, 생성, 관리 등의 역할을 담당하는 기능들이 정의되어 있고 ApplicationContext 인터페이스에는 BeanFactory를 상속 받아 기본적인 빈의 생명주기 관리는 물론 그 외 부가 기능들이 정의되어 있습니다. App..

List, Set, Map, HashMap 의 차이에 대해서 설명해주세요
기술 면접 질문 2023. 7. 24. 12:48

List List는 순서가 있는 중복을 허용하는 자료구조입니다. 순서가 있기 때문에 index 를 통해 특정 원소에 대한 접근이 가능하며 Java에서 일반 배열과는 달리 크기가 가변적이라는 특징이 있습니다. Set Set은 순서가 없고 중복된 데이터를 허용하지 않는 데이터 집합을 나타내는 자료구조입니다. 순서가 없어 특정 원소에 대한 접근을 불가능하나 iterator 를 통해 Set의 원소들에 접근할 수 있습니다. Map Map은 Key, Value 쌍으로 이루어진 데이터 집합을 나타내는 자료구조입니다. Key 를 통해서 Value를 조회하는 방식이며 따라서 Key 에 대해서는 중복을 허용하지 않습니다. 또한 Key 의 순서를 보장하지 않으며 Set 과 마찬가지로 인덱스가 따로 존재하지 않아 내부 원소들..

의존성 주입에 대해 설명해주세요
기술 면접 질문 2023. 7. 23. 12:34

의존성이란? B 클래스가 바뀔 때 A 클래스도 영향을 받는다면 우리는 A 가 B에 의존성을 가지고 있다고 말할 수 있다. public Class A { prviate B b; public A() { this.b = new B(); } } public Class B { public B() { } } 이러한 코드에서 만약 B 클래스에 C 타입의 필드가 추가되고 생성자에서 C 타입 파라미터를 갖는 것으로 변경이 되었다면 어떻게 될까? public Class A { prviate B b; public A(C c) { this.b = new B(c); } } public Class B { private C c; public B(C c) { this.c = c; } } B 클래스가 변경됐을 때 A도 이에 영향을 받..

제네릭에 대해 설명하고 컬렉션 클래스에서 왜 제네릭을 사용하는 지 설명해주세요
기술 면접 질문 2023. 7. 21. 13:20

제네릭이란 클래스 내부에서 사용할 데이터 타입을 클래스 외부에서 지정하는 기법을 '제네릭'이라고 한다. '제네릭'을 사용하면 타입 안정성을 제공하고 타입 체크 및 형 변환을 생략할 수 있게 해주며 하나의 값이 여러 타입을 가질 수 있게 해준다는 장점이 있다. 컬렉션 클래스에서 제네릭을 사용하는 이유 컬렉션 클래스는 다양한 타입의 데이터를 저장하고 관리한다. 타입은 무궁무진하기에 모든 타입에 대한 개별적인 컬렉션 클래스를 만드는 것은 말이 안 되고 모든 데이터 타입을 받을 수 있는 Object 나 외부에서 데이터 타입을 지정하는 기법인 제네릭을 사용하여 컬렉션 클래스를 구현할 수 있을 것이다. Object 타입으로 데이터를 받아 런타임 시 형변환 및 타입 체크를 한다면 제네릭에 비해서 코드 안정성이 떨어지..