분류 전체보기 284

[CS스터디]220610 Java - 4

강한 결합과 느슨한 결합이 무엇인지 설명해주세요. 강한 결합 말 그대로 한 객체가 다른 객체와 강하게 의존 관계가 형성되어 있을 경우 그 결합을 강한 결합이라고 함. public class B { private A a; public B() { this.a = new A(); } public void doB() { a.doA(); } } public class A { public void doA() { System.out.println("doA()"); } } 예를 들어 이렇게 A 클래스가 없으면 B 클래스를 정의할 수 없는 상황인 경우 B 클래스는 A 클래스에 의존한다고 표현함. 그리고 이 때 A 클래스를 다른 클래스로 바꾸면 B 클래스의 코드도 바꿔줘야 함! 간단한 코드라 망정이지 복잡한 코드면 유지 ..

[CS스터디]220609 Java - 3

SOLID(객체지향 5대원칙)에 대해서 설명해주세요. SRP(Single Responsibility Principle) : 단일 책임 원칙클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 함. OCP(Open-Closed Principle) : 개방-폐쇄 원칙확장에는 열려 있어야 하고 변경에는 닫혀 있어야 함. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 함. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 함. DIP(De..

[프로그래머스]더 맵게 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 풀이 문제를 읽자마자 우선 순위 큐가 생각나서 그걸 이용해서 풀었음! 쉬운 문제임 코드 // 코딩테스트 연습 - 힙 - 더 맵게 // https://programmers.co.kr/learn/courses/30/lessons/42626 package PROGRAMMERS.level2; import java.util.PriorityQueue; p..

[프로그래머스]구명보트 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 풀이 배열에서 인덱스와 포문의 범위를 잘 설정해서 풀면 됨 예제 1번의 배열을 sort하면 이렇게 된다. for문을 시작할 때 인덱스와 for문의 i의 위치를 그림으로 나타내면 위의 그림처럼 나타난다. 가장 가벼운 사람과 가장 무거운 사람을 보트에 태워보고 가능하면 인덱스를 한칸 오른쪽으로, i를 한칸 왼쪽으로 이동하고 answer를 1 증가시켜..

[백준]1347번 미로 만들기 - Java

문제 https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net 풀이 처음에 연산자 뿐만 아니라 숫자들도 다 자리를 바꿀 수 있는 줄 알고 대략적으로 시간 복잡도를 계산하고 있었는데 너무 어마무시하게 나와서 헤맸다,,, 근데 다시 읽어보니까 숫자는 고정이고 연산자만 위치를 바꾸면 되는 문제였다... ㅎㅎㅎ 나새끼 문제 좀 잘 읽자 완전 탐색으로 다 돌려보면서 탈출 조건(index == N)이 되면 최..

[CS스터디]220607 Java - 2

인터페이스와 추상 클래스 공통점 상속 받는 클래스 혹은 구현하는 인터페이스 안에 있는 추상 메서드를 구현하도록 강제한다. 차이점 추상클래스 인터페이스 추상클래스 인터페이스 extends implements 하나 이상의 메서드가 추상 메서드이면 모든 메서드가 추상 메서드 추상 메서드 1개 이상, 일반 변수, 일반 메서드 가능 추상 메서드, 상수만 선언 가능 생성자, 일반 변수 가질 수 있음 생성자, 일반 변수를 가질 수 없음 존재 목적이 추상 클래스를 상속받아서 기능을 이용하고, 확장시키는데 있음 함수의 껍데기만 있음. 그 이유는 그 함수의 구현을 강제하기 위해서임. 구현을 강제하므로써 구현 객체의 같은 동작을 보장할 수 있음! 상속은 슈퍼 클래스의 기능을 이용하거나 확장하기 위해서 사용되고, 다중 상속의..

[CS스터디]220607 Java - 1

JVM의 구조와 Java의 실행 방식 JVM이란? 자바 가상 머신(Java Virtual Machine) 자바 바이트 코드를 실행할 수 있게 해줌(.java 파일을 .class 파일(바이트 코드)로 변환해서 실행할 수 있게 해줌) JVM의 구조 프로그램이 실행되면 OS로부터 프로그램이 필요로 하는 메모리를 먼저 할당 받습니다. 그리고 자바 컴파일러를 통해 개발자가 작성한 코드(.java)를 바이트 코드(.class)로 변환합니다. 다음 Class Loader에서 바이트 코드를 JVM에 로딩 시킵니다. 로딩 된 바이트 코드를 execution engine을 통해 기계어로 해석됩니다. 해석된 바이트 코드들은 runtime data areas에 배치되어 실질적인 수행이 이루어집니다. Java의 실행 방식 WO..

[CS스터디]220607 Spring - 3

Servlet Filter와 Spring Interceptor의 차이는 무엇인가요? Servlet Filter Servlet Filter는 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다! 이 그림에서 처럼 필터는 스프링의 범위 밖에서 처리가 되는 것임!! 그니까 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것임! (스프링 빈으로 등록은 됨) 필터를 추가하기 위해서는 javax.servlet의 Filter 인터페이스를 구현해야 함 init(), doFilter(), destroy() 메서드가 존재함 쓰이는 용도 공통된 보안 및 인증/인가 관련 작업 모든 요청에 대한 로깅 또는 감사 이미지/데이터 압축 및 문..

[백준]1347번 미로 만들기 - Java

문제 https://www.acmicpc.net/problem/1347 1347번: 미로 만들기 홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍 www.acmicpc.net 풀이 지금까지 풀었던 문제들은 미로라면 미로, 지도라면 지도가 주어지고 그 미로나 지도 위에서 찾고자하는 무언가를 찾는 방식이였는데 이 문제는 이동한 칸이 먼저 나오고 미로의 모양을 출력해야 되는 문제라 신박했다. 포인트는 제한사항에서 홍준이가 적은 내용의 길이가 0보다 크고 50보다 작다고 적혀있어서 미리 미로의 최대 크기를 정해놓고 접근해야 함 지도의 시작점과 끝점을 이동할 때마다 최신..

[백준]9375번 패션왕 신해빈 - Java

문제 https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 풀이 프로그래머스에서도 비슷한 문제를 풀었던 것 같다! 포인트는 맵을 이용해서 같은 종류의 옷이면 갯수를 증가시켜주어야 한다는 것 (HashMap.put(key, HashMap.getOrDefault(key, 0) + 1) 얘를 잘 알아놓자!) 마지막에 옷의 종류가 한가지일 경우와 한가지 이상일 경우..

[프로그래머스]숫자 문자열과 영단어 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/81301 코딩테스트 연습 - 숫자 문자열과 영단어 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자 programmers.co.kr 풀이 레벨 1 쉬운 문제 String.replace() 함수를 이용해서 문자를 숫자로 바꿔주었음! 코드 // 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어 // https://programmers.co.kr/learn/courses/30/lessons/81301 package PROGRAMMERS.level1; public class..

[프로그래머스]주식가격 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 풀이 왜 스택/큐 문제인지 모르겠음 현재의 가격 안에서 for문을 돌리면서 다음 가격과의 비교를 통해서 현재 인덱스의 가격을 하나씩 증가해주어서 해결했음!! 코드 // 코딩테스트 연습 - 스택/큐 - 주식가격 // https://programmers.co.kr/learn/courses/30/lessons/42584 ..

[프로그래머스]기능개발 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 풀이 배열로 풀었는데 중간에 큐로 바꿔서 풀 수도 있을 듯?? 내가 푼 방법말고 다른 방식의 풀이도 있을 것 같음. 내가 푼건 마지막에 각 배포마다 몇 개의 기능이 배포되는지 계산하는 부분이 좀 더러워서,,, ㅠ 코드 // 코딩테스트 연습 - 스택/큐 - 기능개발 // https://programmers.co.kr/learn/courses/30/le..

[CS스터디]220602 Spring - 2

DI의 종류는 어떤 것이 있고, 이들의 차이는 무엇인가요? DI의 종류에는 Constructor Injection(생성자 주입)과 Field Injection(필드 주입), Setter Injection(수정자 주입)이 있음 1. 생성자 주입 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Component public class ABean { private BBean b; public ABean(BBean b) { this.b=b; } public void bMethod() { b.print(); } } cs 생성자를 위한 빈 주입은 위와 같이 생성자의 매개변수로 의존 주입할 빈을 매개변수로 넣어준다. 스프링 4.3 버전 이후로는 생성자 의존주입에 @Autowired를 넣을 필요는 없다. ..

[CS스터디]220601 Spring - 1

Spring DI/IoC는 어떻게 동작하나요? 어떻게 동작하는지 알기 전에 얘네가 무엇인지를 먼저 알아야 하는데 DI(Dependency Injection)/IoC(Inversion of Control)란? DI는 말 그대로 '의존성 주입'이고, IoC는 '제어의 역전'이다. Spring 프레임 워크를 사용하기 전에 쌩 자바로 코딩을 하면 무언가(메서드나 객체)를 가져다 쓸 때 그 무언가가 있는 라이브러리 등을 가져다 쓴다고 미리 알려주고 써야된다. 예를 들면 자바 프로그램은 main() 에서부터 시작을 하는데 그 안에 있는 애들을 어디서 가지고 와서 사용하는지 명시해줘야 한다. IoC는 이렇게 메서드나 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다! - 객체 지향 언어에서 ..

[Softeer]장애물 인식 프로그램 - Java

문제 https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=409 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 풀이 흔히 볼 수 있는 dfs 문제! 포인트는 블록의 개수를 세어줘야 하는데 언제 count++를 해줄 것인지 블록에 포함된 장애물의 개수를 어떻게 세서 어떻게 정렬해서 출력할 것인지 얘네만 생각하면서 풀면 쉽게 풀 수 있을 걸???? 자세한 건 주석으로!! 코드 // Softeer - 장애물 인식 프로그램 // https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=409 import java.util.*; import java.io.*; public c..

[Softeer]지도 자동 구축 - Java

문제 https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=413 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 풀이 이 문제도 그냥 수학적 사고를 필요로 하는 문제인 것 같다. 다른 트릭? 같은건 없고 그냥 점화식을 잘 세워보던가 규칙을 찾아보던가 편하게 풀 수 있는 문제임!! 코드 // Softeer - 지도 자동 구축 // https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=413 import java.io.IOException; import java.util.Scanner; public class Softeer_Num413_지도자동구축 { public st..

[Softeer]바이러스 - Java

문제 https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=407 Softeer 연습문제를 담을 Set을 선택해주세요. 취소 확인 softeer.ai 풀이 특별한 알고리즘 문제가 아니라 수학적인 사고를 보는 문제인 것 같다! Softeer에 다른 문제들도 어떤 유형인지 흘끔흘끔 봤는데 이런 수학적 사고를 요하는 문제들도 꽤 있는 것 같다! 문제의 조건을 잘 보고 풀어야 한다. 그냥 평소처럼 풀면 무조건 시간 초과나, overflow가 일어나기 때문에 타입이나, 푸는 방식에 주의하며 문제를 해결해야 할 듯 하다!!! 그냥 전체 결과를 다 계산한 다음에 1000000007로 mod 연산을 하면 overflow가 나기 때문에 제곱을 한번 할 때마다 mod 연..

[Softeer]회의실 예약 - Java

문제 https://softeer.ai/practice/info.do?eventIdx=1&psProblemId=626 풀이 처음 풀어보는 현대 문제임!! 별 두개라 그냥 쉽게 풀 수 있을 줄 알았는데, 생각보다 어려워서 오래 걸렸다리,,,, 아니 이게 별 두개라고,,,??? 진짜 나는 한참 멀었다 ㅠ 후우우우ㅜㅜ우ㅜ 암튼 포인트는 출력할 때 사전순으로 회의실 정보를 출력해야 되는 것 회의실 사용 가능 시간을 체크할 방식을 찾는 법 -> 나는 시간대 만큼의 크기를 가진 배열을 만들어줘서 체크했음! 그리고 출력할 때 형식을 맞춰줘야 되어서 여간 귀찮은게 아니었다! 자세한건 코드에다가 주석으로 달아놨음!! 코드 // Softeer - [21년 재직자 대회 예선] 회의실 예약 // https://softeer...

[프로그래머스]크레인 인형뽑기 게임 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/64061?language=java 풀이 레벨 1 문제라 쉽게 풀었음 board[][]를 ArrayList랑 Stack으로 구현해도 될 것 같긴한데 그냥 배열로 해주는게 오히려 더 간편한 듯? 바구니는 쉽게 Stack을 사용했음! 코드보면 쉽게 이해할 수 있을거임 ㅎㅎ ㄱㄱ 코드 // 코딩테스트 연습 - 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 // https://programmers.co.kr/learn/courses/30/lessons/64061?language=java package PROGRAMMERS.level1; import java.util.Stack; public class ..