본문 바로가기
백준 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.
백준 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.
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.