[JAVA] 수박수박수박수박수박수?

태로미·2023년 9월 19일
0

Programmers

목록 보기
20/29
post-thumbnail

❓문제


길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요.
예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.



🚫제한


• n은 길이 10,000이하인 자연수입니다.



💻입출력 예


nreturn
3"수박수"
4"수박수박"













📝해결


1. for문

class Solution {
  public String solution(int n) {
      
    String answer = "";
    
    for(int i=0; i<n; i++){
        answer += (i%2 == 0)? "수":"박";
    }
    
    return answer;
  }
}
  • i는 0부터 시작하므로 나머지가 0일때 나와야 하는 문자는 ‘수’.
    • for문으로 나머지 값에 따라 홀짝을 나누고 answer에 누적합하여 return.
  • n의 범위가 크기 때문에 for문을 돌리면 시간이 다소 걸림.
    • Stream을 사용하는 것이 효율적.

2. stream

class Solution {
  public String solution(int n) {
  
  	return IntStream.rangeClosed(1, n)
					.mapToObj(i -> i%2 != 0? "수":"박")
					.collect(Collectors.joining());
  
  }
}  
  • IntStream을 생성하고 1부터 n까지 범위를 잡음. (문자열의 범위)
    • rangeClosed() 메서드는 종료범위까지 포함함.
  • maq은 스트림 내 요소들을 하나씩 특정 값으로 변환해줌.
    • 스트림에 들어가 있는 값이 input되어 특정 로직을 거친 후 output되어 리턴되는 새로운 스트림에 담기는 것이 mapping.
    • mapToObj() 메서드로 삼항연산자를 사용하여 i의 값을 결정.
  • Collectors 객체의 joining() 메서드로
    스트림에 작업한 결과를 하나의 String, 문자열로 이어 붙임.






💭마무리

  • Level_1 / 07:23
  • Point
    – Stream의 map & collect 기능

반복문을 사용하여 값을 구할 일이 있으면 범위를 먼저 보고 for문을 사용할 지,
스트림을 사용할 지 정하면 좋을 것 같다. ~.~
이번 문제에서는 범위에 해당하는 자연수 n이 10,000이하인데,
그렇다는건 문자열의 길이가 10,000자까지도 가능하다는 것...!!!!
스트림을 쓰는것이 훨씬 낫겠다라는 생각이 들었는데 찐이였다ㅎ_ㅎ~~~
그래도 한동안은 for문도 써보고 스트림도 써보고 이것저것 써봐야지ㅎㅎㅋㅋ


profile
Here And Now

0개의 댓글