본문 바로가기
백준 2910 : LinkedHashMap LinkedHashMap은 HashMap + 삽입순서 유지를 해준다! 문제 위대한 해커 창영이는 모든 암호를 깨는 방법을 발견했다. 그 방법은 빈도를 조사하는 것이다. 창영이는 말할 수 없는 방법을 이용해서 현우가 강산이에게 보내는 메시지를 획득했다. 이 메시지는 숫자 N개로 이루어진 수열이고, 숫자는 모두 C보다 작거나 같다. 창영이는 이 숫자를 자주 등장하는 빈도순대로 정렬하려고 한다. 만약, 수열의 두 수 X와 Y가 있을 때, X가 Y보다 수열에서 많이 등장하는 경우에는 X가 Y보다 앞에 있어야 한다. 만약, 등장하는 횟수가 같다면, 먼저 나온 것이 앞에 있어야 한다. 이렇게 정렬하는 방법을 빈도 정렬이라고 한다. 수열이 주어졌을 때, 빈도 정렬을 하는 프로그램을 작성하시오. 입력 첫째 줄에 메시지.. 2024. 3. 11.
백준 1302 (map) map - key, value 쌍으로 이루어진 자료구조 Map titles = new HashMap(); for (int i = 0; i maxCount || (title.getValue() == maxCount && title.getKey().compareTo(maxTitle) < 0)) { maxTitle = title.get.. 2024. 3. 10.
7785 회사에 있는 사람 문제 상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다. 각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다. 상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 출근, "le.. 2024. 3. 8.
1181 단어정렬 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 256 MB 177833 74687 55975 40.420% 문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 단, 중복된 단어는 하나만 남기고 제거해야 한다. 입력 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 예제 입력 1 복사 13 but i wont hesitate no more no more it cannot wait im yours .. 2024. 3. 7.
자바프로그래밍 1주차 자바 소스 -> 컴파일러 -> .class 바이트코드 -> jvm(메인 .class만 넣음) 형태로 실행 자바는 컴파일 과정만 거치고 실행이 된다 jdk,jre jre - jvm이 있는 실행환경 jdk - 자바 개발 환경 2024. 3. 7.
스프링 용어 정리 @Component 어노테이션 컴포넌트를 스캔할때 @Component가 붙은 클래스는 인스턴스가 생성되서 스프링이 관리하는 스프링 빈이 된다 컴포넌트 스캔 - @ComponentScan 어노테이션으로 특정 패키지의 컴포넌트를 가져온다 의존성 주입 - 빈을 식별하고 와이어링 하는 과정 빈의 생명 주기와 의존성을 스프링이 관리하는 IoC가 일어난다 오토와이어링 - 스프링의 특정 빈의 의존성 주입을 자동으로 해주는 과정 @Component와 @Bean 어노테이션 컴포넌트는 클래스 맨 위에 추가해주면 된다, 빈은 스프링 configurarion 클래스의 특정 메서드에 개발자가 작성해서 사용한다 일반적으로는 컴포넌트 어노테이션을 사용하지만 비즈니스 로직이 많거나, 시큐리티등 다른 라이브러리에 대한 빈이라면 빈 어.. 2024. 2. 25.
의존성 주입 의존성 주입의 유형 3가지 생성자 기반, 수정자 기반, 필드 기반이 있다 @Component class YourBusinessClass{ } @Component class Dependency1{ } @Component class Dependency2{ } @Configuration @ComponentScan public class DepInjectionLauncherApplication { public static void main(String[] args) { try (var context = new AnnotationConfigApplicationContext (DepInjectionLauncherApplication.class)) { Arrays.stream(context.getBeanDefinit.. 2024. 2. 24.
사용자 정의 정렬 Comparable class Student implements Comparable{ String name; int age; @Override public int compareTo(Student o) { if (age == o.age){ return o.name.compareTo(name); } return age - o.age; } } 나이가 같으면 이름을 내림차순으로 정렬 나이가 다르면 나이 순으로 오름차순 정렬하는 코드 클래스에 Comparable 인터페이스를 구현해서 compareTo 메서드에서 양수 - 오름차순 음수 - 내림차순으로 정렬된다 Arrays.sort(배열이름, new Comparator() 형태로 compare 메서드를 만드는 방법도 있음 2024. 2. 20.
Configuration , Bean, 컨테이너, 빈 연결 우선순위 @Configuration 어노테이션이 붙으면 스프링 설정 파일로 사용 가능하다 설정 파일안에 @Bean으로 의존성 주입한 객체를 넣어두고 컨텍스트에서 꺼내서 가져올 수 있었다 // 스프링 프레임워크를 시작해서 빈을 관리하게 만들기 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class); // 컨텍스트에서 객체 가져오기 - bean 어노테이션 System.out.println(context.getBean("name")); System.out.println(context.getBean("age")); System.out.println(context.getBe.. 2024. 2. 19.
백준 2817 문제 전대프연(전국 대학생 프로그래밍 대회 동아리 연합)에서는 매년 프로그래밍 대회를 연다. 올해도 무사히 대회를 개최한 전대프연 회장 성진은 수고해준 스태프들에게 수고비를 주기로 하였다. 하지만 몇몇 스태프는 일을 열심히하지 않았기 때문에 성진은 일을 열심히 한 사람에게만 주기로했다. 하지만 일을 무진장 열심히 한 사람과 덜 열심히 한 사람에게 수고비를 똑같이 주는 것은 불공평하다. 고민을 한 성진은 수고비를 받을 사람을 선출하는 방식으로 ALPS(Allegro Leader Picking System) 을 사용하기로 결심했다. ALPS는 이름에서 보이듯이, 아주 유쾌하고 빠르게 사람들을 선별하는 방법이다. 우선 대회 참가자들은 "수고비를 받을 가치가 있는 스태프" 한 명을 선택해 투표를 한다. (참가자.. 2024. 2. 16.
백준 3085 사탕게임 문제 상근이는 어렸을 적에 "봄보니 (Bomboni)" 게임을 즐겨했다. 가장 처음에 N×N크기에 사탕을 채워 놓는다. 사탕의 색은 모두 같지 않을 수도 있다. 상근이는 사탕의 색이 다른 인접한 두 칸을 고른다. 그 다음 고른 칸에 들어있는 사탕을 서로 교환한다. 이제, 모두 같은 색으로 이루어져 있는 가장 긴 연속 부분(행 또는 열)을 고른 다음 그 사탕을 모두 먹는다. 사탕이 채워진 상태가 주어졌을 때, 상근이가 먹을 수 있는 사탕의 최대 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 보드의 크기 N이 주어진다. (3 ≤ N ≤ 50) 다음 N개 줄에는 보드에 채워져 있는 사탕의 색상이 주어진다. 빨간색은 C, 파란색은 P, 초록색은 Z, 노란색은 Y로 주어진다. 사탕의 색이 다른 인접한 두 .. 2024. 2. 4.
백준 11005 진법 변환 2 https://www.acmicpc.net/problem/11005 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 문제 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다. A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35 입력 첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다. 출력.. 2024. 1. 31.
백준 10989 https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 10000 이하로 들어오니 1~ 10000까지 숫자를 담을 배열을 담고 그 숫자가 몇개인지 출력하는 방식으로 코드를 작성 시간초과.. 입출력을 BufferWriter, BufferReader로 처리하면 풀 수 있었다 import java.io.*; import java.lang.reflect.Array; import java.util.*; public class Main { public static void solu.. 2024. 1. 29.
백준 15552 (자바 빠른 입출력) https://www.acmicpc.net/problem/15552 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmicpc.net 간단히 a+b 값을 리턴하면 되는데 테스트케이스가 100만개 까지 있어서 scanf로는 안된다 메인에 throws IOExeception을 하고 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 형태.. 2024. 1. 29.
Do it 스프링 부트 3장 내비게이션 바 추가하기 부트스트랩을 사용해서 상단 내비게이션 바 작성하는 방법, 보고 작성하며노딘다 https://wikidocs.net/161986 페이징 기능 추가하기 데이터를 여러 페이지에 나눠서 볼 수 있게 페이징 기능을 추가해보자 • 대량 테스트 데이터 만들기 페이징 기능을 테스트 하기 위해서는 대량의 테스트 데이터가 필요하다 테스트 코드에 반복문으로 더미 데이터 추가했다 @Autowired private QuestionService questionService; @Test void testJpa() { for (int i = 1; i 2024. 1. 29.
백준 1543 https://www.acmicpc.net/problem/1543 1543번: 문서 검색 세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한 www.acmicpc.net 처음에는 for문으로 쭉 순회하면서 풀어봤는데 예제는 맞고 반례를 통과하지 못해서 틀렸다.. 한 글자씩 비교하는 것 보다는 indexOf 메서드를 사용해서 시작 위치를 찾아 그 시작위치에서 단어 길이만큼 더하고 그걸 이어서 찾아가는 형태로 코드를 짜면 풀 수 있었다 s1.indexOf(s2, cnt)로 s1에서 cnt 인덱스부터 s2가 있는지 찾을 수 있다 public static int solutio.. 2024. 1. 24.
등수구하기 2중 for문을 쓰고 내부 for문 바깥에 1로 변수를 잡은 후 배열을 돌면서 현재 j로 잡은 숫자보다 큰게 있을때만 증가시키면 된다 public static int[] solution(int[] arr){ int n = arr.length; int[] answer = new int[n]; for(int i=0; i arr[i]) cnt++; } answer[i]=cnt; } return answer; } 2024. 1. 13.
문자열 관련 메서드, 사용법 정리 A - 65 Z - 90 a - 97 z - 122 indexOf 메서드 2024. 1. 12.
Do it 스프링 부트 2장 스프링 부트 프로젝트 구조 이해하기 프로젝트명 + Application.java 는 프로젝트 생성시 자동으로 만들어진다. @SpringBootApplication 어노테이션이 붙어서 스프링 부트 어플리케이션을 시작시킨다 URL 매핑과 컨트롤러 이해하기 컨트롤러는 매핑된 url로 요청을 보내고 스프링이 @ResonseBody로 응답해서 index 라는 문자열을 반환해준다 @Controller public class MainController { @GetMapping("/sbb") @ResponseBody public String index(){ return "index"; } } JPA로 데이터베이스 사용하기 책은 h2기준으로 진행되지만 mysql이 더 편하고 범용적인것 같아서 mysql 기준으로 설정했다.. 2024. 1. 7.
Do it 스프링 부트 1장 https://wikidocs.net/book/7601 do it 시리즈에 스프링 부트3가 있어서 이걸로 공부하려고 한다 • Get 방식과 Post 방식의 차이 Get 방식은 데이터를 url에 노출하기에 서버에서 데이터를 조회하거나 읽을때 사용한다 Post 방식은 데이터를 숨겨서 요청하므로 중요한 데이터를 서버에 저장할때 사용한다 롬복 https://inpa.tistory.com/entry/IntelliJ-%F0%9F%92%BD-Lombok-%EC%84%A4%EC%B9%98-%EB%B0%A9%EB%B2%95-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0 💽 IntelliJ - Lombok 설치 방법 & 오류 해결 인텔리제이 Lombok 설치 방법 롬복(Lombok)은 자바 클래스에서.. 2024. 1. 6.
명품자바 7장 제네릭,컬렉션 Vector : 가변 배별 컬렉션 클래스이다 벡터 중간에 요소를 삽입시 해당 인덱스에 요소를 삽입하고 기존 인덱스와 그 뒤에 있는 요소들을 모두 뒤로 이동시킨다 v.add(2,100); 형태로 중간에 삽입가능하다 벡터에 get을 사용하면 존재하는 요소를 리턴한다 int i = v.get(1); 컬렉션에 값을 넣을때는 자동 박싱을, 값을 가져올때는 자동 언박싱을 한다! ArrayList : 벡터와 거의 동일하고, 멀티스레드간에는 동기화가 되지 않지만, 단일 스레드일때는 벡터보다 빠르다 add,get,indexof,toarray 등의 메서드가 있다 Iterator : 순차 검색을 이용해서 사용한다 Vector v = new Vector(); Iterator it = v.iterator(); 이렇게 해서 벡터.. 2023. 12. 31.
명품자바 6장 모듈, 패키지 default로 선언하면 같은 패키지 않에서만 작동한다 package test;형태로 어느 패키지에 속하는 지 알 수 있고 import test.클래스명 형태로 가져올 수 있다 toString() 을 클래스 안에서 오버라이딩 한 후 자기만의 문자열을 리턴할 수 있다 String의 값을 비교할 때는 equals로 문자열을 비교하고 같은 레퍼런스 인지 비교할때 ==를 사용한다 wrapper 클래스 int, char 등의 기본 타입을 객체로 만들어서 사용할 수 있게 래퍼 클래스를 사용한다 Wrapper 객체는 Integer i = Integer.valueOf(10); 형태로 valueOf() 메서드를 통해서 생성한다 ! 숫자를 다루는 래퍼 클래스는 Integer i = Integer.valueOf("10");.. 2023. 12. 31.
명품자바 5장 상속 서브 클래스는 슈퍼 클래스의 private 이외의 멤버에 접근 가능 animal, person 클래스가 잇을때 super(x, y) 로 person 클래스의 상위 클래스인 animal(x,y)를 호출할 수 있다 업캐스팅 - 서브 클래스의 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환 업캐스팅은 슈퍼 클래스가 서브 클래스 객체를 가리킨다 Peroson p; Student s = new Student(); p = s; 위에서 만든 p는 s를 가리키지만 Person 클래스의 멤버만 접근 가능하다 업캐스팅시 명시적으로 타입을 변환 하지 않아도 된다, Student 객체는 Person 타입이기 때문이다 다운캐스팅 - 업캐스팅과 반대로 슈퍼 클래스 레퍼런스를 서브 클래스 레퍼런스로 변환 다운캐스팅을 하면 .. 2023. 12. 26.
정규화 1정규화 - 컬럼이 원자값을 갖도록 테이블을 분해 2정규화 - 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것 완전 함수 종속은 기본키의 부분집합이 결정자가 되지 않게 하는 것 3정규화 - 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미 위와같은 테이블에서 수강하는 강좌가 바뀌면 수강료도 갱신을 해줘야하는 번거로움이 있다 이행적 종속을 제거해서 학생 번호를 통해 강좌 이름을 참조하고, 강좌 이름으로 수강료를 참조하도록 테이블을 분해했다 BCNF 정규화 - 제3 정규화를 진행한 테이블에 대해 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종.. 2023. 12. 26.
명품자바 4장 default - 다른 패키지에서는 접근 불가능 static - static 메서드는 static 멤버만 접근 가능하다, 객체 없이도 static 메서드는 존재하기때문에 this를 사용 불가능하다 final 클래스 앞에 사용하면 상속 불가능한 클래스 final 메서드는 오버라이딩 하지 못하고 무조건 상속받아서 사용하는 메서드 final 필드는 한번 초기화되면 값을 변경할 수 없는 상수가 된다 ShareClass 클래스에서 pi라는 상수를 만들면 다른 클래스에서는 ShareClass.pi 로 사용할 수 있다 자바 이론 문제 3번 Book [] book = new Book [10]; 으로 객체 배열을 만들면 바로 Book이 10개 생성되지 않는다, book은 배열에 대한 레퍼런스이고 new로 할당을 해줘야 .. 2023. 12. 23.
데베기초 기말 대비 정리 -- 7-1 employees 테이블의 last_name이 'Da_haan'인 직원과 salary가 동일한 직원, 단일 행 서브쿼리 select * from employees where salary = (select salary from employees where last_name like 'De Haan'); select * from employees where salary = (select salary from employees where last_name like 'De Haan'); -- 7-2 다중 행 서브쿼리 employees 테이블에서 department_id 별로 가장 낮은 salary에 해당하는 직원, 다중 행 서브쿼리 select * from employees e where e.sal.. 2023. 12. 20.
데베기초15주차 무결성 제약조건 복습 외래키 제약조건 - 시험에 나온다 cascade를 쓰지 않고 제약조건 비활성화할떄 먼저 부모 테이블이 참조하는 자식의 제약 조건을비활성화하고 부모 테이블의 제약조건을 비활성화해야한다 위의 과정은 여러 단계를 거치기에 번거롭다 cascade를 사용해서 제약조건을 비활성화하면 참조하는 외래키 제약 조건들도 비활성화된다 ppt 10(2) 35쪽부터 쭉 실습 - 제약조건, cascade쪽 내용 CREATE TABLE DEPT01( DEPTNO NUMBER(2) CONSTRAINT DEPT01_DEPTNO_PK PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13) ); CREATE TABLE EMP01( EMPNO NUMBER(4) CONSTRAINT EM.. 2023. 12. 14.
안드교양 15주차 책 실습 10-2 진행, 연습문제 투표결과 보여주는거 하기 연습문제 인텐트 값 넘겨서 계산기 만드는거 시험에 낸다 oncreate 위에 변수 선언하면 final을 붙여줘야한다 style="?android:attr/ratingBarStyleIndicator" 레이팅바 별 갯수 조정하는 속성 레이팅 세팅할때 setraing 메서드를 사용, 원래 레이팅을 getrating으로 가져와서 추가하는 값을 추가해줌 시험에 내는 거는 인텐트로 값 넘긴거 받아오는 타입 등을 중요하게 본다! Integer.parseInt로 string -> int 변환하는거 해보기, 시험에 나온다 2023. 12. 14.
데베 기말 시험대비 PPT 관계대수 연습문제 = 2500000; -- 3번 개발부서에 근무하는 사원의 이름과, 부서명, 봉급을 검색하라 select e.empname, d.deptname, e.salary from employee e, department d where e.dno = d.deptno and d.deptname = '개발'; -- 4번 김창섭 또는 최종철이 속한 부서이고 부서명이 기획부서인 사원명, 부서명을 검색 select empname, deptname from employee e, department d where e.dno = d.deptno and (empname = '김창섭' or empname = '최종철') and d.deptname = '기획'; -- 5번 소속된 직원이 한명도 없는 부서의 번.. 2023. 12. 12.
데베 15주차 트리거 시험에 나온다 ! 인덱스를 쓰지 않은 이상 update를 할때는 기본키만 된다. 기말엔 erd를 주고 트리거를 만드는 형태로 문제가 나온다! 쿼리문의 트리거를 보면서 이해 트리거는 남발했다간 성능이 저하되고 락이 걸릴 수 있다, 신중하게 쓰자 시험범위 조인,내장함수,외부조인,서브쿼리, 뷰, 트리거, 관계대수, db설계이론 create database tritest; use tritest; create database trianswer; use trianswer; create table goods( pronum char(4) primary key, proname varchar(20) not null, price int, stock int default 0 ); create table ordering.. 2023. 12. 8.