Algorithm - 단어 뒤집기

👇 공부한 자료들의 실제 소스파일들을 기록해논 공간입니다 👇
단어 뒤집기
문제 해결 순서 정하기
- 초반, 문제 해결을 위한 처리고민
1. 입력된 숫자만큼 String 배열 생성
2. 입력된 숫자 만큼 String 배열에 각각 문자 입력하기
3. 배열에 들어간 각각의 문자를 뒤집는 처리하기
4. 뒤집힌 문자 출력하기
- 중간쯤 고민
1. String 객체는 Immutable 클래스이다. 기존 문자열을 변경 시 새로운 문자열을 생성한다는 뜻이다. 그럴 경우 메모리 관리 차원 측면에서 지금처럼 저장된 데이터를 변경하고 재 저장 시 좋은 방법은 아닌 것 같다
2. 문자열을 어떻게 뒤집을 것인가?
- 끝날 때 쯤 고민
1. 문제 제출 시 컴파일 오류와 런타임 오류가 발생되었다 , 기존 채점 방식과 맞지 않는 방식으로 처리되어 발생된 문제 같았다 (클래스 호출로 사용해야 함)
2. String 배열을 어떻게 매개변수로 보낼 것 인가?
3. 리턴타입을 어떻게 처리해야 할 것인가?
StringBuilder
String과 StringBuilder는 사용 용도가 다르다고 한다.
String : immutable클래스, 각 char를 수정하거나 접근할 수 없다
StringBuffer : thread-safe 하고 수정가능한 char배열, 멀티스레드(동기적)에 사용한다
여러 스레드로부터 입력이 동시다발적으로 들어와도, 순차적으로 입력시켜 준다
StringBuilder : thread-safe 하지 않지만, 수정 가능한 char배열, 싱글스레드(비동기적)에 사용한다
멀티스레드 기능이 없기 때문에 스레드 간 충돌이나 오류로 오는 손실을 막을 수 없어서 누락가능성이 있다
단, 싱글스레드가 속도가 빠르다
reverse(). toString()
문자열을 뒤집는 방법은 반복문과 StringBuffer & revers() 메서드를 사용하면 된다
StringBuffer클래스의 revers 메소드를 사용 시
문자열을 거꾸로 뒤집어 다시 반환해 준다
reverse메서드는 StringBuffer 객체를 반환해 주기 때문에 toString()을 사용하여 형변환을 해준다
Array.stream(배열명). forEach
Stream은 컬렉션에서 저장된 요소를 하나씩 꺼내 람다식으로 처리하는 반복자이다.
람다식에 대한 사용 시 컬렉션, 스레드에 대한 이해를 먼저 해야 한다
Stream동작은 Collection(ArrayList, Set, Map..), 배열, 가변 매개변수, 특정 타입 난수, 람다 표현식, 파일, 빈 스트림등 다양하게 가공할 수 있
java에서 반복자는 보통 Iterator(java.utill)이고, 스트림은 java.util.stream패키지에 속한 인터페이스이다
스트림과 컬렉션은 집합에 대한 클래스이고 , 컬렉션이 요소를 할당하고 관리하는데 목적이 있다면
스트림은 요소를 검색하거나 값을 처리하는데 목적이 있다.
다
Iterateor과 비슷한 방식으로 동작한다.
스트림이 제공하는 연산은 중간, 최종 연산으로 분류하는데 중간 연산은 연산 결과를 스트림으로 반환하기 때문에 중간 연산을 연속하여 사용가능하다.
최종 연산은 스트림의 요소를 소모하면서 연산을 수행하므로 단 한 번만 연산이 가능하다
오늘 쓴 forEach는 최종 연산이다
특징 : 코드가 간결하다, 병렬처리가 쉽다, 결과 관리가 쉽다.
초반 작성한 코드
최종 작성한 코드
코드 결과
고민했던 부분들
그렇게 복잡한 코드는 아니지만 어떻게 좀 더 간결하고 불필요한 변수 삭제불필요한 연산을 하지 않도록 하는 부분도 점검이 필요했다.그리고 문제 제출 시 solution이라는 정한 메서드를 처리해서 출력해 주는 방식으로 제출해야 해서어떤 방식이 좋은지 고민을 했다.이것저것 바꿔보면서 검색도 많이 해보다가 오늘도 많이 배운 것 같다.