22Days) 자료구조/알고리즘(2) - 재귀 StringifyJSON 과제

nacSeo (낙서)·2022년 11월 18일
0

◉ 학습목표

1. JSON에 대해 간략히 이해하고, StringifyJSON 과제를 진행하며 재귀적 사고를 활용할 수 있다.
  1. StringifyJSON 과제

⦿ 학습내용

☞ JSON (Java Script Object Notation)

✔︎ (서로 다른 프로그램 사이에서) 데이터 교환을 위해 만들어진 (객체 형태의) 포맷
✔︎ 직렬화(serialize) : 객체 형태를 JSON 형태(문자열)로 변경, writeValueAsString() 사용
✔︎ 역직렬화(deserialize) : JSON 형태(문자열)을 객체 형태로 변경, readValue() 사용
✔︎ JSON의 기본 규칙
✓ 자바스크립트 객체
① 키 : 따옴표없이 사용 가능
② 문자열 값 : 어떠한 형태의 따옴표도 사용 가능
✓ JSON
① 키 : 반드시 쌍따옴표 !
② 문자열 값 : 반드시 쌍따옴표 !
③ 키와 값 사이, 키-값 쌍 사이에 공백 ❌

☞ StringifyJSON

⭐️ 위의 직렬화에서 봤듯이, JSON은 받은 객체들을 모두 문자열로 받는다❗️
✔︎ 입력된 값이 문자열일 경우
String.format()을 사용 - 간단!
✔︎ 입력된 값이 Integer일 경우
String.valueOf()를 사용 - 간단2!!
✔︎ 입력된 값이 Boolean일 경우
✓ 동일하게 String.valueOf()를 사용 - 간단3!!!
✔︎ 입력된 값이 Object[]일 경우 (여기서부터 🤯)
✓ for문, 향상된 for문, 어제 코플릿에서 풀었듯이 head/tail로 나눠서 푸는 법 3가지정도가 있었는데, 해당 문제에서 가장 좋은 방법은 for문!
stringify(), toString(), replaceAll() 등의 메서드 사용
✔︎ 입력된 값이 HashMap일 경우
✓ EntrySet(), KeySet(), Iterator 등 방법은 여러가지! 그렇지만 EntrySet()이나 KeySet()이 권장된다 🤔
stringify(), toString(), replaceAll() 등의 메서드와 entrySet(), getKey(), getValue() 등의 메서드 사용
✓ 저장 순서가 필요한 결과값을 원할 때는 LinkedHashMap<>()을 생각해내자❗️
✔︎ 지정되지 않은 타입인 경우
✓ 초간단..!!! null이구 문자열로 보내야하니까 쌍따옴표만 씌어주면 된다,,!

◉ 느낀 점

☞ 버거퀸이 생각나게끔 하는 과제였다.. (버거퀸은 레퍼런스 코드라도 있었지 😭)
일단 처음 테스트 코드도 있고 처음 맞이해보는 유형의 과제라 당황했다. 어떻게 풀어야할 지 감잡는 데만 시간 엄청 걸린 것 같다 ,, 앞에 문자열, Integer, Boolean을 입력 값으로 받은 경우의 변환은 딱히 재귀 개념이 적용되지 않고 String 타입으로 형변환만 시켜주면 되기에 순식간에 끝내버렸다. 하루종일 과제로 시간이 잡혀있는 가운데 점심도 먹기 전에 3가지를 끝내 시간이 많이 남을 것 같았다 😎.. (이 때까지만 해도 머리가 터질 줄 몰랐겠지..)
배열과 해시맵을 입력 값으로 변환하는 데는 상당한 노력이 필요했다.. 수도 없이 많이 구글링을 하고 이것저것 코드를 넣어보며 테스트를 돌리면서 10개 정도의 테스트 케이스 중 3개만 남겨놨다! 그렇지만 그 뒤 아무리 찾아보고 시도해도 넘을 수 없는 벽을 느낌 ,,, 다 끝내지 못해도 노력한 곳까지 우선 git을 통해 PR 보내달라 하셔서 미완성 코드를 보내드렸다 🥲
마무리 실시간 세션에서 순식간에 풀이를 하시는 걸 보고 입이 쩍 ,,, 그치만 나는 배열과 해시맵을 어제 코플릿처럼 반복문이 금지된 줄 알았다구요 ,,,,, 🤯 (for문을 사용했어도 내가 해냈을까 ,,? 😊)
여튼 이번 과제를 하면서 많은 걸 느꼈다! 재귀도 재귀지만 내가 HashMap에 좀 많이 약한 것 같았고 여러 가지 메서드들을 적재적소에 사용해야 하는 지 대충 감각을 키워 나가고 있는 느낌이다. 주말을 통해 부족한 부분들을 채우고 시간이 남는다면 풀어본 코플릿들도 반복해서 풀이해봐야겠다.

◉ 내일의 키워드

・ Stack
・ Queue
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글