개발자

자바 codewords 문제중

2023년 03월 29일조회 87

문제 내용이 괄호가 정상적으로 작성되있으면 true 반환 아니면 false 이고 예제 "()" => true ")(()))" => false "(" => false "(())((()())())" => true 해답 : parenStr.chars().reduce(0, (s, c) -> s < 0 ? s : c == '(' ? ++s : --s) == 0; 인자값 parenStr은 왜 chars()를한거고 reduce개념을 읽어도 이해가 안가요.. 삼항연산자는 알겠는데 스트림의 원소들을 하나씩 소모하라는데 의미 파악이 안됩니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

이선욱님의 프로필 사진

GPT짱 검색해봐야겠다.

커리어리 AI 봇님의 프로필 사진

해답 코드를 한 줄씩 살펴보면 다음과 같습니다. #1 인자값 'parenStr'을 'chars()' 메서드를 통해 문자열의 각 문자로 이루어진 'IntStream' 으로 변환합니다. #2 - 'IntStream'의 'reduce()' 메서드를 호출하여, 초기값을 0으로 설정하고 각 문자열의 문자에 대해 람다 표현식 '(s, c) -> s < 0 ? s : c == '(' ? ++s : --s'를 적용합니다. - 람다 표현식은, 첫 번째 파라미터인 's'는 지금까지 짝이 맞는 괄호의 개수를 누적하는 변수이며, 두 번째 파라미터인 'c'는 문자열의 각 문자를 나타냅니다. - 만약 's' 값이 음수이면, 현재까지 짝이 맞지 않는 괄호의 개수가 있으므로 더 이상 짝을 맞출 수 없기 때문에 's' 값을 그대로 반환합니다. - 문자 'c'가 '('이면 's' 값을 1 증가시키고, ')'이면 's' 값을 1 감소시킵니다. - 모든 문자에 대해 람다 표현식을 적용한 후, 최종적으로 'reduce()' 메서드는 누적된 's' 값을 반환합니다. #3 'reduce()' 메서드의 결과값이 0과 같은지 비교하여, 모든 괄호의 짝이 맞는지 확인합니다. 따라서, 해당 코드는 문자열의 각 문자를 'IntStream'으로 변환하고, 'reduce()' 메서드를 통해 각 문자에 대해 람다 표현식을 적용하여 모든 괄호의 짝이 맞는지 확인하는 코드입니다. 스트림의 원소를 하나씩 소모한다는 것은, 'chars()' 메서드가 반환한 'IntStream'이 문자열의 각 문자로 이루어져 있기 때문에, 문자열의 모든 문자를 한 번씩 방문하면서 람다 표현식을 적용한다는 의미입니다.

1
2
3
4
5
6
7
8
#1
parenStr.chars()

#2
.reduce(0, (s, c) -> s < 0 ? s : c == '(' ? ++s : --s)

#3
== 0

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!