์ฌ๊ท ํจ์
์ฌ๊ท ํจ์๋ ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์๋ฅผ ๋งํ๋ค.
์๊ณ ๋ฆฌ์ฆ์์ ์ฌ๊ท๋ ๋์ผํ ๊ตฌ์กฐ์ ๋ ์์ ๋ฌธ์ ๋ก ๋๋ ์ ์๊ณ ์ด๋ฅผ ํตํด ์ ์ฒด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ณดํต ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ด ๋ง์ ์ค์ฒฉ ํ์๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ต๊ฑฐ๋, ๋ณ์ ์ฌ์ฉ์ ์ค์ด๊ธฐ ์ํ ์ํฉ์์ ์ฌ๊ท๋ฅผ ์ฌ์ฉํ๋ค.
์ฌ๊ท ํจ์ ์ฅ์
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ์ ์ค์ผ ์ ์์ด์ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ๋ณ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
์ฌ๊ท ํจ์ ๋จ์
- ์ฝ๋์ ํ๋ฆ์ ์ง๊ด์ ์ผ๋ก ํ์ ํ๊ธฐ ์ด๋ ต๋ค.
- ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฐํ ๊ฐ์ ๋ชจ๋ stack์ ์ ์ฅํ์ฌ ๋ฐ๋ณต๋ฌธ์ ๋นํด ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ฉ์๋ ์ข ๋ฃ ์ดํ ๋ณต๊ท๋ฅผ ์ํ context switching ๋น์ฉ์ด ๋ฐ์ํ๋ค.
์ฌ๊ท ํจ์ ์ฌ์ฉ์ ์ฌ์ฉํ๋ ค๋ฉด?
- ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ์ชผ๊ฐค ์ ์์ด์ผ ํ๋ค.
- ์ฌ๊ท ํจ์ ํ์ถ ์กฐ๊ฑด์ด ์กด์ฌํด์ผ ํ๋ค.
์ฌ๊ท์ ์ฌ๊ณ
- ํจ์์ ์ ๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ ๊ฐ ์ ์ํ๊ธฐ
- ๊ฐ์ฅ ์์ ๋จ์๋ก ๋ฌธ์ ๋ฅผ ์ชผ๊ฐ๊ธฐ
- ๊ฐ์ฅ ์์ ๋ฌธ์ ํด๊ฒฐํ์ฌ ํ์ถ ์กฐ๊ฑด ๊ตฌ์ฑํ๊ธฐ (Base Case)
- ๋จ์์๋ ๋ณต์กํ ๊ฒฝ์ฐ๋ฅผ ํด๊ฒฐํ๊ธฐ (Recursive Case)
JSON
JSON์ JavaScript Object Notation์ ์ค์๋ง๋ก ์๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋จ ์ฌ์ด์์ ๋ฐ์ดํฐ์ ๊ตํ์ ์ํด ๋ง๋ค์ด์ง ๊ฐ์ฒด ํํ์ ํฌ๋งท์ด๋ค.
๋ฐ์ดํฐ๋ฅผ JSON ํฌ๋งท์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ๊ณผ์ ์ ์ง๋ ฌํ(serialize), ๋ฌธ์์ด์ ๋ค์ JSON์ ๊ฐ์ฒด๋ก ์ฝ์ด์ค๋ ๊ณผ์ ์ ์ญ์ง๋ ฌํ(deserialize)๋ผ๊ณ ํ๋ค.
๋ค์์ jackson
์์ ์ ๊ณตํ๋ ObjectMapper
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ง๋ ฌํ, ์ญ์ง๋ ฌํํ๋ ๊ณผ์ ์ ๋ํ๋ธ ์ฝ๋์ด๋ค.
// writeValueAsString์ผ๋ก ์ง๋ ฌํํ๋ ๊ณผ์
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(message);
System.out.println(json);
/* Output
{"createdAt":"2022-09-21,10:10:10","receiver":"๋ฐ๋์ด","sender":"๋ณด๋ธ์ด","message":"๋ญํด?"}
*/
// readValue๋ก ์ญ์ง๋ ฌํํ๋ ๊ณผ์
ObjectMapper mapper = new ObjectMapper();
String json = "{\\"createdAt\\":\\"2022-09-21,10:10:10\\",\\"receiver\\":\\"๋ฐ๋์ด\\",\\"sender\\":\\"๋ณด๋ธ์ด\\",\\"message\\":\\"๋ญํด?\\"}";
Map<String, String> deserializedData = mapper.readValue(json, Map.class);
System.out.println(deserializedData);
/* Output
{createdAt=2022-09-21,10:10:10, receiver=๋ฐ๋์ด, sender=๋ณด๋ธ์ด, message=๋ญํด?}
*/
stringify() ๊ตฌํ
JSON์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ท ํ์์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋์ ์ฌ๊ท๋ฅผ ์ด์ฉํ์ฌ JSON ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํด์ฃผ๋ stringify
๋ฉ์๋๋ฅผ ์ง์ ๊ตฌํํด๋ดค๋ค. (์์ ์์์์ writeValueAsString()
)
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.*;
public class stringifyJSON {
public String ObjectMapper(Object data) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(data);
}
public String stringify(Object data) {
if (data instanceof String) {
return String.format("\"%s\"", data);
}
else if (data instanceof Integer){
return data.toString();
}
else if (data instanceof Boolean){
return data.toString();
}
else if (data instanceof Object[]){
Object[] arr = (Object[]) data;//๋ค์ด ์บ์คํ
if (arr.length==0) return "[]";
String stringifyData = "";//๋ฌธ์์ด๋ก ๋ณํํ json ๋ฐ์ดํฐ
for (int i=0;i<arr.length;i++) {
stringifyData += stringify(arr[i]) + ",";
}
return String.format("[%s]",stringifyData.substring(0, stringifyData.length()-1));
}
else if (data instanceof HashMap<?,?>){
HashMap<String, Object> map = (HashMap<String, Object>) data;
String stringifyData = "";//"string"
if (map.isEmpty()) return "{}";
for (Map.Entry<String, Object> entry : map.entrySet()) {
stringifyData+=stringify(entry.getKey())+":"+stringify(entry.getValue())+",";
}
return String.format("{%s}", stringifyData.substring(0, stringifyData.length()-1));
}
return "null";
}
}
'๐ก Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ (with Python) (0) | 2022.08.04 |
---|---|
[๊ทธ๋ํ ํ์] DFS, BFS ์ ๋ฆฌ (with C++) (0) | 2022.07.18 |