기본 콘텐츠로 건너뛰기

코딩 테스트 - 주사위 게임 1

package programmers ; public class 주사위 _ 게임 _1_Java_230818 { /* 문제 설명 1 부터 6 까지 숫자가 적힌 주사위가 두 개 있습니다 . 두 주사위를 굴렸을 때 나온 숫자를 각각 a, b 라고 했을 때 얻는 점수는 다음과 같습니다 . a 와 b 가 모두 홀수라면 a^2 + b^2 점을 얻습니다 . a 와 b 중 하나만 홀수라면 2 × (a + b) 점을 얻습니다 . a 와 b 모두 홀수가 아니라면 |a - b| 점을 얻습니다 . 두 정수 a 와 b 가 매개변수로 주어질 때 , 얻는 점수를 return 하는 solution 함수를 작성해 주세요 . */ public int solution ( int a , int b) { int answer = 0 ; if (a % 2 != 0 && b % 2 != 0 ) { answer = a * a + b * b ; } else if (a % 2 != 0 || b % 2 != 0 ) { answer = 2 * (a + b) ; } else { answer = Math. abs (a - b) ; } return answer ; } public int solution2 ( int a , int b) { boolean a 홀수체크 = a % 2 != 0 ; boolean b 홀수체크 = b % 2 != 0 ; if (a 홀수체크 && b 홀수체크 ) { return a * a + b * b ; } else if (a 홀수체크 || b 홀수체크 ) { return 2 * (a + b) ; } ...

코딩 테스트 - 시소 짝꿍

package programmers ; import java.util.Arrays ; import java.util.HashMap ; import java.util.Map ; class 시소 _ 짝꿍 _Java_230817 { /* 어느 공원 놀이터에는 시소가 하나 설치되어 있습니다 . 이 시소는 중심으로부터 2(m), 3(m), 4(m) 거리의 지점에 좌석이 하나씩 있습니다 . 이 시소를 두 명이 마주 보고 탄다고 할 때 , 시소가 평형인 상태에서 각각에 의해 시소에 걸리는 토크의 크기가 서로 상쇄되어 완전한 균형을 이룰 수 있다면 그 두 사람을 시소 짝꿍이라고 합니다 . 즉 , 탑승한 사람의 무게와 시소 축과 좌석 간의 거리의 곱이 양쪽 다 같다면 시소 짝꿍이라고 할 수 있습니다 . 사람들의 몸무게 목록 weights 이 주어질 때 , 시소 짝꿍이 몇 쌍 존재하는지 구하여 return 하도록 solution 함수를 완성해주세요 . */ public long solution ( int [] weights) { Arrays. sort (weights) ; long answer = 0 ; Map<Double , Integer> map = new HashMap<>() ; // 무게 - 해당 무게 개수 for ( int i : weights) { // 무게의 형태를 double 로 변환 double d = i * 1.0 ; // 현재 무게 // 각 경우의 무게 계산 double d2 = (i * 1.0 ) / 2.0 ; // 시소 축과 좌석 간의 거리가 2m 인 경우 double d3 = (i * 2.0 ) / 3.0 ;...

코딩 테스트 - rny_string

class rny_String_Java_230816 {     public String solution (String rny_string ) {         String answer = rny_string. replaceAll ( "[m]" , "rn" );         return answer;     } } class rny_String_Kotlin_230816 {     fun solution(rny_string: String): String {         return rny_string.replace("m", "rn")     } } [] 안쓰고 m만 써도 됨. 1글자라 m만 표시할 거면 m -> rn 근데 범위 지정하거나 여러 개 쓸 거면 문자열 클래스 사용해서 [m] https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html 정규식은 저 문서 참조하면 되는데 저도 쓰는 것만 씁니다...(대소문자 등)

코딩 테스트 - 세균 증식

package programmers ; class 세균 _ 증식 _Java_230815 { /* 어떤 세균은 1 시간에 두배만큼 증식한다고 합니다 . 처음 세균의 마리수 n 과 경과한 시간 t 가 매개변수로 주어질 때 t 시간 후 세균의 수를 return 하도록 solution 함수를 완성해주세요 . */ public int solution ( int n , int t) { int answer = 0 ; for ( int i = 0 ; i < t ; i++) { n *= 2 ; } answer = n ; return answer ; } public int solution_best ( int n , int t) { int answer = 0 ; answer = n << t ; return answer ; } } package programmers class 세균 _ 증식 _Kotlin_230815 { fun solution (n: Int , t: Int): Int { var answer = n for (index in 0 ..t - 1 ) answer *= 2 return answer } fun solution_best (n: Int , t: Int): Int = n shl t }

코딩 테스트 - l로 만들기

package programmers ; class l 로 _ 만들기 _Java_230814 { /* 알파벳 소문자로 이루어진 문자열 myString 이 주어집니다 . 알파벳 순서에서 "l" 보다 앞서는 모든 문자를 "l" 로 바꾼 문자열을 return 하는 solution 함수를 완성해 주세요 . */ public String solution (String myString) { return myString.replaceAll( " [^l-z] " , "l" ) ; } public String solution2 (String myString) { String answer = "" ; for ( int i = 0 ; i < myString.length() ; i++) { if (myString.charAt(i) < 'l' ) { answer += 'l' ; } else { answer += myString.charAt(i) ; } } return answer ; } } package programmers class l 로 _ 만들기 _Kotlin_230814 { fun solution (myString: String): String { return myString. map { if ( it . code <= 'l' . code ) 'l' else it } ...

코딩 테스트 - 스킬트리

package programmers ; import java.util.ArrayList ; import java.util.Arrays ; import java.util.Iterator ; class 스킬트리 _Java_230813 { public int solution (String skill , String[] skill_trees) { int answer = 0 ; for (String skillTree : skill_trees) { int index = 0 ; // 스킬 순서 인덱스를 초기화 // 스킬트리를 순회하면서 가능한 스킬트리인지 체크 boolean 가능한지확인 = true; for ( char i : skillTree.toCharArray()) { if (skill.indexOf(i) == index) { // 현재 배워야 할 스킬을 올바른 순서대로 배우는 경우 index++ ; } else if (skill.indexOf(i) < index) { // 이미 배운 스킬인 경우는 무시 } else { // 올바른 스킬 순서가 아닌 경우 가능한지확인 = false; break; } } if ( 가능한지확인 ) { answer++ ; } } return answer ; } public int solu...

코딩 테스트 - qr code

package programmers ; import java.util.stream.Collectors ; import java.util.stream.IntStream ; class qr_code_Java_230812 { /* 두 정수 q, r 과 문자열 code 가 주어질 때 , code 의 각 인덱스를 q 로 나누었을 때 나머지가 r 인 위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요 . */ public String solution ( int q , int r , String code) { String answer = "" ; for ( int i = 0 ; i < code.length() ; i++) { if (i % q == r) { answer += code.charAt(i) ; } } return answer ; } public String solution_stream ( int q , int r , String code) { return IntStream. range ( 0 , code.length()) // 인덱스 스트림 생성 .filter(i -> i % q == r ) // 조건에 맞는 인덱스 걸러냄 .mapToObj(code::charAt) // 인덱스에 있는 문자를 문자열로 변환함 .map(String:: valueOf ) // 문자열을 문자열 스트림으로 변환함 .collect(Collectors. joining ()) ; // 문자열 스트림을 하나의 문자열로 합침 } } ...

코딩 테스트 - 문자열 곱하기

package programmers ; import java.util.stream.Collectors ; import java.util.stream.IntStream ; class 문자열 _ 곱하기 _Java_230811 { /* 문자열 my_string 과 정수 k 가 주어질 때 , my_string 을 k 번 반복한 문자열을 return 하는 solution 함수를 작성해 주세요 . */ public String solution_pojo (String my_string , int k) { String answer = "" ; for ( int i = 0 ; i < k ; i++) { answer += my_string ; } return answer ; } public String solution_java11 (String my_string , int k) { return my_string.repeat(k) ; } public String solution_stream (String my_string , int k) { return IntStream. range ( 0 , k) .mapToObj(i -> my_string ) .collect(Collectors. joining ()) ; } } package programmers class 문자열 _ 곱하기 _Kotlin_230811 { fun solution_pojo (my_string: String , k: Int): String { var answer: String = "" for (i in 0 until k) { answer += my_stri...

코딩 테스트 - 인사고과

package programmers import java.util. A rrays; public class 인사_고과_Java_230810 {     /*     문제 설명         완호네 회사는 연말마다 1년 간의 인사고과에 따라 인센티브를 지급합니다.         각 사원마다 근무 태도 점수와 동료 평가 점수가 기록되어 있는데         만약 어떤 사원이 다른 임의의 사원보다 두 점수가 모두 낮은 경우가 한 번이라도 있다면         그 사원은 인센티브를 받지 못합니다.         그렇지 않은 사원들에 대해서는 두 점수의 합이 높은 순으로 석차를 내어         석차에 따라 인센티브가 차등 지급됩니다. 이때, 두 점수의 합이 동일한 사원들은 동석차이며,         동석차의 수만큼 다음 석차는 건너 뜁니다.         예를 들어 점수의 합이 가장 큰 사원이 2명이라면 1등이 2명이고 2등 없이 다음 석차는 3등부터입니다.         각 사원의 근무 태도 점수와 동료 평가 점수 목록 scores이 주어졌을 때,         완호의 석차를 return 하도록 solution 함수를 완성해주세요.     제한 사항         1 ≤ scores의 길이 ≤ 100,000         scores의 각 행은 한 사원의 근무 태도 점수와 동료 평가 점수를 나타내며 [a, b] 형태입니다.         scores...

개발 공부 - @Temporal Annotation

 여러분이 Java 8 이상을 썼을 경우에는 @Temporal을 사용하지 않았을 수 있습니다. JPA에서 날짜, 시간 정보를 매핑할 때 사용하는 어노테이션인데, 보통 Entity 클래스의 필드를 매핑할 때 사용합니다. Database의 DATE, TIME, TIMESTAMP 등의 시간 Timestamp를 매핑할 때 사용합니다. Java 8 이상 사용시에는 LocalDate, LocalTime, LocalDateTime 같은 java.time 패키지의 날짜, 시간 처리 방법이 있으니 이걸로 쓰십시오. (java.util 패키지의 Date, Calendar는 버그 발생  가능성이 있다고 합니다.) 따라서 Java 8 이하를 사용할 때는 아래와 같은 방법으로 사용하면 됩니다. @ Temporal ( javax . persistence . TemporalType . TIMESTAMP ) private Date dateExample; 만약 Java 버전을 올리거나, 마이그레이션 하는 경우에는 아래와 같이 변경하면 됩니다. 1. 타입 변경 : Timestamp 와 유사하게 사용할 수 있도록 LocalDateTime을 씁니다. import java.time.LocalDateTime; private LocalDateTime dateExample; 2. 컬럼의 매핑 어노테이션 변경 : @Column 어노테이션을 사용해서 Database의 컬럼과 필드를 매핑합니다. import javax .persistence .Column ; @ Column ( name = "date_example1" ) private LocalDateTime dateExample; 3. 기존 사용하던 코드 수정 : 기존에 연동되어 있는 Date를 LocalDateTime 으로 변경합니다. MyEntity entity = new MyEntity(); entity .setDateTemporary(LocalDateTime.now()); 4. 영속성, 조회 작업 수정 : JPA에...

코딩 테스트 - 없는 숫자 더하기

package programmers ; import java.util.Arrays ; class 없는 _ 숫자 _ 더하기 _Java_230809 { public int solution ( int [] numbers) { int answer = 0 ; boolean [] found = new boolean [ 10 ] ; // 0 부터 9 까지의 숫자가 있는지 여부를 저장하는 배열 Arrays. sort (numbers) ; // 주어진 배열의 숫자들을 확인하여 해당 숫자를 찾았음을 표시 for ( int num : numbers) { found[num] = true; } // 0 부터 9 까지의 숫자 중에서 찾을 수 없는 숫자들을 더함 for ( int i = 0 ; i < 10 ; i++) { if (!found[i]) { answer += i ; } } return answer ; } // 사실 이거 2 나 3 방향으로 푸는 게 맞다 !!!! 효율 !! public int solution2 ( int [] numbers) { int sum = 45 ; for ( int i : numbers) { sum -= i ; } return sum ; } public int solution3 ( int [] numbers) { return 45 -Arrays. stream (numbers).sum() ; } } package programmers class 없는 _ 숫자 _ 더하기 _Kotlin_230809 { fun solution (numbers: IntArray): In...

개발 공부 - ZooKeeper

Apache ZooKeeper는 분산 응용 프로그램을 위한 강력한 오픈 소스 분산 조정 서비스입니다.  ZooKeeper는 분산 시스템에서 데이터 관리, 동기화 및 조정을 제공하여 여러 프로세스 또는 서버 간에 공유 데이터와 설정을 관리하고 일관성을 유지합니다. 주요 특징은 다음과 같습니다: 1. 계층적 네임스페이스: 데이터를 계층적 구조로 저장하며, 각 노드에 데이터 및 설정을 저장할 수 있습니다. 2. 분산 동기화: 다양한 분산 시스템의 동기화와 조정을 관리하여 일관성을 유지합니다. 3. 안정성: ZooKeeper는 안정적인 작동을 위해 메모리 기반의 데이터 스토리지와 높은 가용성을 제공합니다. 4. 워치(Watch) 메커니즘: 클라이언트가 데이터 노드를 모니터링하고 변경 사항을 실시간으로 감지할 수 있도록 합니다. 5. 일관성: ZooKeeper는 강한 일관성 모델을 제공하여 데이터 변경 사항이 일관되게 처리됨을 보장합니다. ZooKeeper를 Java에서 사용하려면 Apache ZooKeeper 클라이언트 라이브러리를 사용해야 합니다.  아래는 간단한 Java 예제로 ZooKeeper에 연결하고 데이터를 읽고 쓰는 방법입니다. 의존성 추가: Maven을 사용하는 경우 `pom.xml` 파일에 다음 의존성을 추가합니다: <dependencies>     <dependency>         <groupId>org.apache.zookeeper</groupId>         <artifactId>zookeeper</artifactId>         <version>3.7.0</version>     </dependency> </dependencies> ZooKeeper 연결 및 데이터 읽기/...

개발 공부 - RabbitMQ

RabbitMQ 에 대해서 AI의 도움을 받아 정리 해봅니다. - RabbitMQ는 AMQP(Advanced Message Queuing Protocol)를 따르는 오픈소스 메시지 브로커 제품 중 하나입니다. - 다수의 작업을 처리할 때 웹 애플리케이션 서버에서 모든 요청을 처리하지 않고, 메시지 브로커를 통해 처리자에게 작업을 위임하는 방식을 지원합니다. 0. 구조 1) Message: 처리해야 할 내용이 담긴 데이터입니다. 2) Producer: Message를 생성하고, Exchange에 Message를 전달합니다. 3) Exchange: Producer로부터 받은 Message를 Queue에 전달해주는 역할을 합니다. 4) Queue: Message를 저장하고, Consumer들에게 Message를 전달합니다. 5) Consumer: Queue로부터 Message를 받아 처리합니다. 1. Message Broker:    - Message Broker는 송신자(Producer)와 수신자(Consumer) 간의 효율적인 메시지 전달을 중재하는 중요한 역할을 합니다.    - RabbitMQ는 메시지 브로커로서 Message를 받아 Exchange로 전달하고, Exchange에서 Queue로 라우팅하여 Consumer에게 전달합니다. 2. Exchange:    - Exchange는 Producer로부터 받은 Message를 적절한 Queue에 전달해주는 역할을 합니다.    - Exchange에는 다양한 타입이 있으며, Fanout, Direct, Topic, Headers 등이 있습니다.    - Exchange는 라우팅 규칙을 정의하고, Binding을 통해 Queue와 연결됩니다. 3. Queue:    - Queue는 메시지를 저장하는 공간으로, Consumer가 Message를 처리하기 위해 대기하는 곳입니다.    - Ex...