• 문자열 겹쳐쓰기
문제 설명

문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.


제한사항
  • my_string와 overwrite_string은 숫자와 알파벳으로 이루어져 있습니다.
  • 1 ≤ overwrite_string의 길이 ≤ my_string의 길이 ≤ 1,000
  • 0 ≤ s  my_string의 길이 - overwrite_string의 길이

입출력 예my_stringoverwrite_stringsresult
"He11oWor1d" "lloWorl" 2 "HelloWorld"
"Program29b8UYP" "merS123" 7 "ProgrammerS123"

입출력 예 설명

입출력 예 #1

  • 예제 1번의 my_string에서 인덱스 2부터 overwrite_string의 길이만큼에 해당하는 부분은 "11oWor1"이고 이를 "lloWorl"로 바꾼 "HelloWorld"를 return 합니다.

입출력 예 #2

  • 예제 2번의 my_string에서 인덱스 7부터 overwrite_string의 길이만큼에 해당하는 부분은 "29b8UYP"이고 이를 "merS123"로 바꾼 "ProgrammerS123"를 return 합니다.

 

[문제풀이]

class Solution {
    public String solution(String my_string, String overwrite_string, int s) {
        String answer = "";
        
        int len1 = my_string.length();
        int len2 = overwrite_string.length();
        
        String sub1 = my_string.substring(0, s);
        String sub2 = my_string.substring((s+len2), len1);
        
        answer += sub1 + overwrite_string + sub2;
        
        return answer;
    }
}

 

[다른 사람 코드풀이]

굳이 length() 를 사용하지 않고 간결하게  작성할 수있었다

class Solution {
    public String solution(String my_string, String overwrite_string, int s) {
        String before = my_string.substring(0, s);
        String after = my_string.substring(s + overwrite_string.length());
        return before + overwrite_string + after;
    }
}

[문제 설명]

자연수 n이 입력으로 주어졌을 때 만약 n이 짝수이면 "n is even"을, 홀수이면 "n is odd"를 출력하는 코드를 작성해 보세요.


제한사항
  • 1 ≤ n ≤ 1,000

입출력 예

입력 #1

100

출력 #1

100 is even

입력 #2

1

출력 #2

1 is odd

 

 

[문제풀이]

import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        if(n%2 == 0){
            System.out.println(n + " is even");
        }else{
            System.out.println(n + " is odd");
        }
        
        
        
    }
}

 

 

[다른 문제 해결 방안]

문제를 보고 단순하게 먼저 떠오른 생각으로 2로  나눈다음 나머지값으로 해결하며 되겠다고 생각하였으나

조금 더 생각하여 삼항 연산자를 사용한다면 코드가 4줄에서 한줄로 간단하게 풀 수 있었다

System.out.print(n + " is "+(n % 2 == 0 ? "even" : "odd"));

TEST 진행 중 아래와 같은 this.em NullPointException 오류발견

java.lang.NullPointerException: Cannot invoke "jakarta.persistence.EntityManager.createQuery(String, java.lang.Class)" because "this.em" is null

	at jpabook.jpashop2.repository.MemberRepository.findByName(MemberRepository.java:31)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)

 

 

 

@Autowired를 사용하지 않고 

@RequiredArgsConstructor 로 변경하면서  final 을 붙이지 않아 오류 발생

 

 

@RequiredArgsConstructor 이란?

final 키워드를 사용한 인스턴스만  Bean 객체로 등록한다

final 키워드를 사용하지 않았을 경우 NullPointException 오류 발생

 

 

@Autowired 사용하지 않고 @RequiredArgsConstructor 변경이유 :

 

@Autowired  어노테이션과 생성자를 사용하여 의존성 주입 3가지 방법

1)필드 주입

2) setter 주입

3)생성자 주입

 

스프링이 공식적으로 추천하는 방법은 생성자 주입이다. 한번 의존성을 주입받은 객체는 프로그램이 끝날때까지 변하지 않는 특징을 가지므로 [불변성]을 표시해주는 것이 좋기 때문이다

 

그래서 의존성을 주입할 객체는 final 키워드를 사용하는 것

 

 

 

 

Spring Boot 2.2.x 버전부터는 junit5가 기본으로 설정되어있음

해당 프로젝트에서는 junit4를 사용하기 위해 변경

 

 

1. build.gradle -> dependencies 안에 아래 코드 넣기

testImplementation("org.junit.vintage:junit-vintage-engine") {
    exclude group: "org.hamcrest", module: "hamcrest-core"
}

 

2.Reload

+ Recent posts