> For the complete documentation index, see [llms.txt](https://jinwon-yoon.gitbook.io/jinonys-blog/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jinwon-yoon.gitbook.io/jinonys-blog/daily-log/2022.09.24.md).

# 2022.09.24

일일 회고 44회차

## 할일 및 한일

* [x] 알고리즘 문제 풀이&#x20;
* [x] 디자인 패턴 12장(복합 패턴) 공부 및 notion 정리(50%)&#x20;

## 경험 및 배움&#x20;

오늘은 알고리즘 문제 풀이 및 디자인 패턴 공부를 진행하였다.

### 알고리즘 문제 풀이&#x20;

오늘 풀어본 문제는 단어 뒤집기 문제였다. 먼저 정수를 하나 입력받고, 입력 받은 정수 만큼의 단어를 입력하면, 입력한 단어들이 출력 될때 거꾸로 뒤집어서 출력되게 만드는 문제였다.

우선 조건을 첨부한다.

**\[설명]**

**N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램**을 작성하세요.

**\[입력]**

첫 줄에 자연수 N(3<=N<=20)이 주어집니다.

두 번째 줄부터 N개의 단어가 각 줄에 하나씩 주어집니다. 단어는 영어 알파벳으로만 구성되어 있습니다.<br>

**\[출력]**

N개의 단어를 입력된 순서대로 한 줄에 하나씩 뒤집어서 출력합니다.

**\[예시]**

* 입력 : 3, good Time Big
* 출력 : doog emiT giB

이 문제를 풀 때 필요한 메소드는 **`StringBuilder` 클래스의 `reverse()`** 메소드가 필요했다. `reverse` 메소드를 사용하면 문자의 순서가 거꾸로 뒤집어진다고 한다. 또 다른 방법이 있었는데, 인덱스를 사용하여 메소드를 사용하지 않고 직접 문자들의 자리를 변경해주는 방법 또한 존재했다.

여기서 `String` 이 아닌 `StringBuilder` 클래스를 사용하는 이유는 `String` 은 처음에 대입한 문자열을 변경할 수 없기 때문에, 새로운 객체를 만들어서 다시 대입하는 형식으로 절차가 이루어지지만 **`StringBuilder` 는 수정이 가능하여 객체를 만들지 않아도 되서 메모리를 덜 사용할 수 있다**고 한다. 중요한 정보 같으니 꼭 기억해두어야 겠다.

자세한 코드와 풀이 내용은 링크를 첨부한다.

{% embed url="<https://jinwonyoon.notion.site/flip-word-2c03299ea2844dee88e0e126845358ce>" %}

### 디자인 패턴 12장(복합 패턴) 공 및 notion 정리(50%)&#x20;

이번 단원에서는 지금까지 배웠던 패턴들을 복합해서 섞어서 쓰는법을 배운다. 1단원에서 했던 오리 코드들에 여러 패턴들을 적용해보면서, 곧이어 진행할 프로젝트에도 도움이 많이 될 것 같다.

## 개선 및 목표&#x20;

* 내일은 일정이 있으니 오전에 일찍 일어나서 공부를 미리 끝마쳐놔야겠다.&#x20;
