문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.
제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.
문제 풀이
1. String s를 각 문자로 나눠서 배열에 저장한다.
2. 각 인덱스 값을 매길 변수 int index =0; ->홀수 짝수를 나타내기 위해
3. 공백이 생길 때마다 index 값을 초기화 한다.
4. 홀수이면 toLowerCase() 사용, 짝수이면 toUpperCase() 사용한다.
5. 변환한 글자를 answer에 저장한다.
public class weirdo {
public String solution(String s) {
String answer = "";
String[] word = s.split(""); //s를 한글잘씩 잘라 word 배열에 담습니다.
int index = 0; //홀수, 짝수를 나타나기 위한 index 변수입니다.
int length = word.length; //word 배열의 길이
for (int i = 0; i < length; i++) {
if (word[i].equals(" ")){
word[i] = " ";
index = 0; //공백이후 index 값 초기화 ==0이 된다.
}else {
if (index % 2 != 0) {
word[i] = word[i].toLowerCase();
index++;
} else if (index % 2 == 0) {
word[i] = word[i].toUpperCase();
index++;
}
}
answer = answer + word[i];
}
return answer;
}
public static void main(String[] args) {
weirdo method = new weirdo();
System.out.println(method.solution("I love a pizza"));
}
}
기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다. 항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자.
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public String solution(int month, int day) {
String answer = "";
LocalDate date = LocalDate.of(2022, month, day);
LocalDate newDate = date.plusDays(98);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("M월 dd일");
answer = dateTimeFormatter.format(newDate);
return answer;
}
public static void main(String[] args) {
Main method = new Main();
System.out.println(method.solution(1, 18));
}
java.time.LocalDate 와
java.time.format.DateTimeFormatter 를 import하면 쉽게 풀 수 있는 문제였습니다.
.plusDay() 메소드를 이용하여 날짜를 더합니다.
DateTimeFormatter.ofPattern()을 사용해서 "M월 dd일" 형식으로 출력합니다.
문제2.
지용이는 항해에서 한 주 동안 공부 기록을 남길 알고리즘을 만들어보기로 결심했다. 항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자. 체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다. 체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다. 체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다. 따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.
public class Main {
public int solution(int[] arr1, int[] arr2) {
int answer = 0;
for(int i=0; i<arr2.length; i++){
if( arr2[i]>=29){
answer += 21-arr1[i];
}else {
answer += arr2[i] -arr1[i];
}
}
return answer;
}
public static void main(String[] args) {
Main method = new Main();
int[] arr1 = {9, 9, 9, 9, 7, 9, 8};
int[] arr2 = {23, 23, 30, 28, 30, 23, 23};
System.out.println(method.solution(arr1, arr2));
}
}
문제3.
문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 소수의 최대값과 소수가 아닌 수의 최소값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
import java.util.concurrent.LinkedTransferQueue;
public class primeNumbers {
public String solution(String s) {
String answer = "";
//1은 소수가 아니다
//2를 제외한 짝수도 소수가 아니다.
//제곱근(sqrt) 범위 나누기법이란?
//소수 여부를 검사할 수에 대해서 그 값의 제곱근을 기준으로 그 곱은 대칭적으로 곱이 일어나므로
//제곱근 이하의 작은 값까지만 검사를 하면 나머지는 검사를 할 필요가 없다는 방법으로 검사할 데이터를 제곱근 개 이하로 줄 일 수 있는 방법
//소수 중 최대값
//소수가 아닌 수 중 최소값
int primeMax = 0;
int nonPrimeMin = Integer.MAX_VALUE;
String[] numbers = s.split(" "); //
for (String number : numbers) {
int num = Integer.parseInt(number);
if (numbercheck(num)) {
if (num > primeMax) {
primeMax = num;
}
} else {
if (num < nonPrimeMin) {
nonPrimeMin = num;
}
}
}
return nonPrimeMin + " " + primeMax;
}
private boolean numbercheck(int num) {
//1이하는 소수가 아님
if (num <= 1)
return false;
//2는 소수지만 2로 나누어지는 수는 소수가 아님
if (num % 2 == 0)
return num == 2;
//3부터 소수 검사; 제곱근 이하의 수로 나누어지면 소수
for (int i = 3; i < Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
primeNumbers method = new primeNumbers();
String s = "97 75 88 99 95 92 73";
System.out.println(method.solution(s));
}
}
public class 가 있는 경우, 소스파일의 이름은 반드시 public class의 이름과 일치해야한다.
public class가 하나도 없는 경우, 소스파일의 이름은 상관 없음
객체의 생성과 사용
1. 객체의 생성
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수를 선언 --> 리모콘 역할
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t; //Tv 클래스 타입의 참조변수 t를 선언
t = new tv(); //Tv 인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
class Ex6_1 {
public static void main(String args[]) {
Tv t; // Tv인스턴스를 참조하기 위한 변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한다.
t.channel = 7; // Tv인스턴스의 멤버 변수 channel의 값을 7로 한다.
t.channelDown(); // Tv인스턴스 메서드 channelDown()을 호출한다.
System.out.println("현재 채널은 " + t.channel + " 입니다..");
}
}
class Tv {
// Tv의 속성(멤버변수)
String color; // 생상
boolean power; // 전원상태(on/off)
int channel; // 채널
// Tv의 기능(메서드)
void power() { power = !power; } // TV를 켜거나 끄는 기능을 하는 메서드
void channelUp() { ++channel; } // TV의 채널을 높이는 기능을 하는 메서드
void channelDown() { --channel; } // TV의 채널을 낮추는 기능을 하는 메서드
}
class Ex6_2 {
public static void main(String args[]) {
Tv t1 = new Tv(); // Tv t1; t1 = new Tv();를 한 문장으로 가능
Tv t2 = new Tv();
System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
t1.channel = 7; // channel 값을 7으로 한다.
System.out.println("t1의 channel값은 7로 변경하였습니다.");
System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
}
}
int result = add(3,5); // int add(intx, int y)를 호출하고 결과를 result에 저장
class Ex6_4 {
public static void main(String args[]) {
MyMath mm = new MyMath();
long result1 = mm.add(5L, 3L);
long result2 = mm.subtract(5L, 3L);
long result3 = mm.multiply(5L, 3L);
double result4 = mm.divide(5L, 3L);
System.out.println("add(5L, 3L) = " + result1);
System.out.println("subtract(5L, 3L) = " + result2);
System.out.println("multiply(5L, 3L) = " + result3);
System.out.println("divide(5L, 3L) = " + result4);
}
}
class MyMath {
long add(long a, long b) {
long result = a + b;
return result;
// return a + b; //위의 두 줄을 이와 같이 한 줄로 간단히 할 수 있다.
}
long subtract(long a, long b) { return a - b; }
long multiply(long a, long b) { return a * b; }
double divide(double a, double b) {
return a / b;
}
}
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한 사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다.