1. 문제

문자열 섞기 (java)

https://school.programmers.co.kr/learn/courses/30/lessons/181942

 

2. 문제 해결

두 개의 문자열 길이가 동일하므로 substring을 사용하여 하나씩 for문을 돌림

 

 

3.문제 풀이

class Solution {
    public String solution(String str1, String str2) {
        String answer = "";
        
        for(int i=0; i<str1.length(); i++){
            answer += str1.substring(i,i+1);
            answer += str2.substring(i,i+1);
        }
        
        return answer;
    }
}

 

자바에서 String 문자열 생성 방식

1. new String()

2. String literal("") 

 

두 개 차이 : 저장공간(메모리)의 차이

new 연산자를 사용하여 String을 생성할 경우

Heap 메모리 영역에 저장됨

 

리터럴(literal) 을 사용하여 String을 생성할 경우

Heap 안에 있는 String constant pool 영역에 생성

 

 

 

 

String s1 = "Cat";
String s2 = "Cat";
String s3 = new String("Cat");
  • literal로 생성한 s1, s2는 동일한 객체를 바라보고, new String()으로 생성한 s1은 다른 메모리 주소의 객체를 바라본다
  • String literal로 생성한 객체가 이미 존재한다면, 해당 객체는 이미 생성되어 있는 String constant pool 영역을 참조한다
  • new 연사자로 생성한 String 객체는 같은 값이 String pool에 존재하더라도, Heap영역에 별도로 객체를 생성한다.

 

System.out.println(s1.equals(s3)); //true 
System.out.println(s1 == s2);	//true
System.out.println(s1 == s3);	//false

 

  • equals값이 동일한지 비교하고, ==메모리상 동일한 객체인지 비교한다
  • s1과 s3는 값은 동일하지만 메모리상 저장된 곳이 다르기 때문에 false가 나온다
  • s1과 s2는 모두  literal을 사용한 동일한 문자열이기 때문에 동일한 주소값을 바라보므로 true가 나온다

 

 

참조 : https://yeoonjae.tistory.com/entry/Java-String-literal-%EA%B3%BC-new-String-%EC%9D%98-%EC%B0%A8%EC%9D%B4

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

문자열 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"));

+ Recent posts