[알고리즘문제풀기] 대문자와 소문자

silver's avatar
Dec 20, 2024
[알고리즘문제풀기] 대문자와 소문자

문제

내가 작성한 정답

class Solution { public String solution(String my_string) { StringBuilder answer = new StringBuilder(); for(char c : my_string.toCharArray()) { if(Character.isLowerCase(c)) answer.append(Character.toUpperCase(c)); else answer.append(Character.toLowerCase(c)); } return answer.toString(); } }
💡

StringBuilder와 StringBuffer

  1. 스레드 안전성 StringBuilder: 스레드가 안전하지 않다. 즉, 여러 스레드가 동시에 접근할 경우 데이터 일관성이 보장되지 않는다. 따라서 단일 스레드 환경에서 성능이 더 좋습니다. StringBuffer: 스레드가 안전하다. 내부적으로 메서드에 synchronized 키워드를 사용하여 여러 스레드가 동시에 접근할 때 데이터 일관성을 유지한다. 그러나 이로 인해 성능이 떨어질 수 있다.
  1. 성능 StringBuilder: 스레드 안전성을 제공하지 않기 때문에, 단일 스레드 환경에서 더 빠른 성능을 제공한다. StringBuffer: 스레드 안전성을 제공하지만, 그로 인해 성능이 떨어질 수 있다. 따라서 멀티스레드 환경에서 사용해야 한다.
  1. 사용 용도 StringBuilder: 주로 단일 스레드 환경에서 문자열을 자주 변경해야 할 때 사용한다. 예를 들어, 문자열을 반복적으로 추가하거나 수정하는 경우에 적합하다. StringBuffer: 멀티스레드 환경에서 문자열을 안전하게 수정해야 할 때 사용한다. 여러 스레드가 동시에 문자열을 수정해야 하는 경우에 적합하다.

다른 사람들이 작성한 정답

StreamAPI

notion image
import java.util.stream.Collectors; class Solution { public String solution(String myString) { return myString.chars() .mapToObj(operand -> String.valueOf((char) (Character.isLowerCase(operand) ? Character.toUpperCase(operand) : Character.toLowerCase(operand)))) .collect(Collectors.joining()); } }
class Solution { public String solution(String my_string) { String answer = ""; for(int i=0; i<my_string.length(); i++){ char c = my_string.charAt(i); if(Character.isUpperCase(c)){ answer += String.valueOf(c).toLowerCase(); }else{ answer += String.valueOf(c).toUpperCase(); } } return answer; } }
💡
char charAt(int index) - 주어진 인덱스에 위치한 문자를 반환
💡

map vs mapToObj

  1. map 기본 데이터 타입(예: int, long, double)의 스트림에서 사용. 이 메서드는 각 요소를 변환하여 같은 기본 데이터 타입의 스트림을 반환한다. 예를 들어, IntStream에서 map을 사용하면 여전히 IntStream을 반환한다.
  1. mapToObj 기본 데이터 타입의 스트림을 객체 타입의 스트림으로 변환할 때 사용. 이 메서드는 각 기본 데이터 타입의 요소를 객체로 변환하여 Stream<T>를 반환한다. 예를 들어, IntStream에서 mapToObj를 사용하면 Stream<String>과 같은 객체 타입의 스트림을 반환할 수 있다.
Share article

silver