항해99_11/23일 코딩테스트 문제 해설 및 정리

정우범·2022년 11월 23일
0

이상한 문자 만들기

문제 설명
문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

제한 사항
문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

입출력 예
s return
"try hello world" "TrY HeLlO WoRlD"

풀이코드)
public class Main {
public static void main(String[] args) {
String s = "try hello world";
String answer = "";
int count = 0;
String[] split_s = s.split(""); //빈칸을 기준으로 나눔
for(int i=0; i <split_s.length; i++){ //split길이 만큼 반복
if(split_s[i].equals(" ")){ // splir_s[i]가 " "과 같다면 카운트 증가
count = 0; // 띄어쓰면 초기화 하기 위한 용도
}else {
if(count % 2 ==0){ //카운트의 나머지가 0과 같다면
count++; //카운트 증가
split_s[i] = split_s[i].toUpperCase(); //split_s의 i번째를 대문자로 변환
}else {//카운트의 나머지가 0이 아니라면
count++;//카운트 증가
split_s[i] = split_s[i].toLowerCase(); //split_s의 i번째를 소문자로 변환
}
}
answer += split_s[i];//조건문 끝나고 split_s의 i번째의 변환된걸 answer에 더함
}
System.out.println(answer);
}
}
회고 : split으로 나누는거 까지는 생각을 했으니, 그 이후의 생각을 코드로 구현을 못함


자릿수 더하기

문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

제한사항
N의 범위 : 100,000,000 이하의 자연수

입출력 예
N answer
123 6
987 24
해설코드)
public class Main {
public static void main(String[] args) {
int n = 123;
int answer=0;
String convert = Integer.toString(n); // 자연수를 문자열로 변환
for(int i=0; i<convert.length(); i++){ // i를 입력받은 문자열의 길이만큼 반복
answer += Integer.parseInt(convert.substring(i, i+1));
} // convert를 substring으로 ex) 0, 1 // 1, 2//.... 이렇게 더해나감
//substring(시작점, 끝점앞까지) 출력합
System.out.println(answer);
}
}
회고 : 아는 함수였지만 응용능력이 아직 부족함. 많은 알고리즘 코드를 봐야겠다.


자연수 뒤집어 배열로 만들기

문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한 조건
문제 설명
n은 10,000,000,000이하인 자연수입니다.

입출력 예
n return
12345 5,4,3,2,1

풀이코드)
class Solution {
public int[] solution(long n) {
String str = String.valueOf(n); // int형 n을 String으로 형변환
int number = str.length();
int[] answer = new int[number]; // str의 길이 만큼 배열 생성
for(int index=0; index<number;index++) {
answer[number-index-1] = Integer.parseInt(String.valueOf(str.charAt(index)));
}
return answer;
}

}

회고 : 이거는 아직.... 감을 못잠겠다ㅋㅋㅋ


정수 내림차순으로 배치하기

문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한 조건
n은 1이상 8000000000 이하인 자연수입니다.

입출력 예
n return
118372 873211

풀이코드)
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class Main {
public static void main(String[] args) {
long n = 118372;
String convert = Long.toString(n); //정렬하기 위해 long타입 값을 String 타입으로 변환
List list = new ArrayList();
// ArrayList의 sort를 구현 하기 위해 ArrayList생성
for(int i=0; i < convert.length(); i++){//3 list에 값을 넣어주기 위해 for문을 이용하여 convert문자열의 길이까지 charAt메서드를 통해 character 값을 넣어준다.
list.add(convert.charAt(i));
}
list.sort(Comparator.reverseOrder());//4 sort메서드를 활용해 내림차순으로 정렬.
String temp_convert = "";//5 값을 담을 문자열 변수를 하나 선언해 준 다음, list에 있는 값을 for문을 활용해여 값을 넣어준다.
for(int i=0; i<list.size(); i++){
temp_convert += list.get(i);//6 temp_convert에 들어있는 값을 반환 값인 Long타입으로 변환하여 값을 리턴한다.
}
System.out.println(Long.parseLong(temp_convert));

}

}
회고 : 이것도 모르겠다. 일단 답안지 보고 최대한 이해해보는걸로


LocalDate에 년, 월, 주, 일 더하기
LocalDate 클래스에서 제공하는 다음 네 가지 메서드를 사용하여 LocalDate 객체에 년, 월, 주, 일을 더할 수 있습니다.

plusYears() : 이 메서드를 호출한 LocalDate 객체에 년도(year)가 더해진 LocalDate 객체를 반환합니다.

plusMonths() : 이 메서드를 호출한 LocalDate 객체에 월(month)이 더해진 LocalDate 객체를 반환합니다.

plusWeeks() : 이 메서드를 호출한 LocalDate 객체에 주(week)가 더해진 LocalDate 객체를 반환합니다.

plusDays() : 이 메서드를 호출한 LocalDate 객체에 일(day)이 더해진 LocalDate 객체를 반환합니다.


LocalDate에 년, 월, 주, 일 빼기
LocalDate 클래스에서 제공하는 다음 네 가지 메서드를 사용하여 LocalDate 객체에 년, 월, 주, 일을 뺄 수 있습니다.

minusYears() : 이 메서드를 호출한 LocalDate 객체에 년도(year)가 차감된 LocalDate 객체를 반환합니다.

minusMonths() : 이 메서드를 호출한 LocalDate 객체에 월(month)이 차감된 LocalDate 객체를 반환합니다.

minusWeeks() : 이 메서드를 호출한 LocalDate 객체에 주(week)가 차감된 LocalDate 객체를 반환합니다.

minusDays() : 이 메서드를 호출한 LocalDate 객체에 일(day)이 차감된 LocalDate 객체를 반환합니다.

Ex.code
public class Main {
public static void main(String[] args) {//날짜 더하기

    LocalDate todayLocalDate = LocalDate.now();
    System.out.println("오늘 날짜: " + todayLocalDate);

    LocalDate after_five = todayLocalDate.plusYears(5);
    System.out.println("5년 뒤: " + after_five);

    LocalDate after_tenMonth = todayLocalDate.plusMonths(10);
    System.out.println("10개월 뒤: " + after_tenMonth);

    LocalDate after_threeWeek = todayLocalDate.plusWeeks(3);
    System.out.println("3주 뒤: " + after_threeWeek);

    LocalDate after_twentyDays = todayLocalDate.plusDays(20);
    System.out.println("20일 뒤: " + after_twentyDays);

모의고사 1번문제
import java.time.LocalDate;

public class test01{
public String sol(int month, int day){
String answer ="";
LocalDate date = LocalDate.of(2022, month, day);
LocalDate days = date.plusDays(98); // date의 날짜에 98만큼 더해서 days에 저장
answer = days.getMonthValue() + "월" + " "+ days.getDayOfMonth()+"일";

    return answer;
}

}
회고 : 아... 내가 다른 클래스를 찾았구나.. 이거였네.. 분명히 이거 관련한게 있을거같았는데
구글링의 미숙인가.. 이 클래스를 빨리 찾았다면 10분이면 풀었을꺼 같다.

profile
코린이 성장기

0개의 댓글