Home

0

프로그래머스 - 신규 아이디 추천 (Java)

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스 - 신규 아이디 추천 (Java) 프로그래머스 - 신규 아이디 추천 (Python) 문제 풀이주어진 조건에 맞춰 하나하나씩 구현하면 되는 문제다. 문자열 관련 정규 표현식을 이용하면 더욱 깔끔하게 문제를 해결 할 수 있다. 전체 소스class Solution { public String solution(String new_id) { String id = new_id.toLowerCase(); id = id.replaceAll("[^-_.a-z0-9]", ""); id = id.replaceAll("[.]{2,}", "."); id = id.replaceAll("^[.]|[.]$", ""); if (id.equals("")) { id += "a"; } if (id.length() >= 16) { id = id.substring(0, 15); id = id.replaceAll("[.]$", ""); } while (id.length() <= 2) { id += id.charAt(id.length() - 1); } return id; }}

0

프로그래머스 - 로또의 최고 순위와 최저 순위 Python

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/77484 프로그래머스 - 로또의 최고 순위와 최저 순위 Cpp 프로그래머스 - 로또의 최고 순위와 최저 순위 Java 프로그래머스 - 로또의 최고 순위와 최저 순위 Python def ranking(cnt): if cnt == 6: return 1 elif cnt == 5: return 2 elif cnt == 4: return 3 elif cnt == 3: return 4 elif cnt == 2: return 5 else: return 6def cmp(lottos, win_nums): answer = [] cnt = 0 zeros = 0 for i in lottos: if i == 0: zeros += 1 elif i in win_nums: cnt += 1 answer.append(ranking(cnt+zeros)) answer.append(ranking(cnt)) return answerdef solution(lottos, win_nums): answer = cmp(lottos, win_nums) return answer

0

프로그래머스 - 로또의 최고 순위와 최저 순위 Java

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/77484 프로그래머스 - 로또의 최고 순위와 최저 순위 Cpp 프로그래머스 - 로또의 최고 순위와 최저 순위 Java 프로그래머스 - 로또의 최고 순위와 최저 순위 Python class Solution { private int findScore(int value) { if (value == 6) { return 1; } else if (value == 5) { return 2; } else if (value == 4) { return 3; } else if (value == 3) { return 4; } else if (value == 2) { return 5; } else { return 6; } } private int[] cmpStrings(int[] lottos, int[] win_nums) { int[] result = new int[2]; int length = lottos.length; int zeroCnt = 0; int sameCnt = 0; for (int i = 0; i < length; i++) { if (lottos[i] == 0) { zeroCnt++; continue; } for (int j = 0; j < length; j++) { if (lottos[i] == win_nums[j]) { sameCnt++; } } } result[0] = findScore(sameCnt + zeroCnt); result[1] = findScore(sameCnt); return result; } public int[] solution(int[] lottos, int[] win_nums) { int[] answer = new int[2]; answer = cmpStrings(lottos, win_nums); return answer; }}

0

프로그래머스 - 로또의 최고 순위와 최저 순위 Cpp

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/77484 프로그래머스 - 로또의 최고 순위와 최저 순위 Cpp 프로그래머스 - 로또의 최고 순위와 최저 순위 Java 프로그래머스 - 로또의 최고 순위와 최저 순위 Python #include <bits/stdc++.h>using namespace std;int findScore(int value) { if (value == 6) { return 1; } else if (value == 5) { return 2; } else if (value == 4) { return 3; } else if (value == 3) { return 4; } else if (value == 2) { return 5; } else { return 6; }}vector<int> cmpString(vector<int>& lottos, vector<int>& win_nums) { vector<int> result; int zeroCnt = 0; int sameCnt = 0; for (int i = 0; i < 6; i++) { if (lottos[i] == 0) { zeroCnt++; continue; } for (int j = 0; j < 6; j++) { if (lottos[i] == win_nums[j]) { sameCnt++; } } } result.push_back(findScore(sameCnt + zeroCnt)); result.push_back(findScore(sameCnt)); return result;}vector<int> solution(vector<int> lottos, vector<int> win_nums) { vector<int> answer; answer = cmpString(lottos, win_nums); return answer;}

0

프로그래머스 - 키패드누르기 Cpp

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/77484 프로그래머스 - 키패드누르기 Cpp 프로그래머스 - 키패드누르기 Python #include <iostream>#include <map>#include <queue>#include <string>#include <vector>using namespace std;bool isLeft(int number) { if (number == 1 || number == 4 || number == 7) { return true; } return false;}bool isRight(int number) { if (number == 3 || number == 6 || number == 9) { return true; } return false;}bool isMiddle(int number) { if (number == 2 || number == 5 || number == 8 || number == 0) { return true; } return false;}string solution(vector<int> numbers, string hand) { string answer = ""; map<int, pair<int, int>> keypad; keypad[1] = {0, 0}, keypad[2] = {0, 1}, keypad[3] = {0, 2}; keypad[4] = {1, 0}, keypad[5] = {1, 1}, keypad[6] = {1, 2}; keypad[7] = {2, 0}, keypad[8] = {2, 1}, keypad[9] = {2, 2}; keypad[0] = {3, 1}; pair<int, int> left_point = {3, 0}; pair<int, int> right_point = {3, 2}; cout << keypad[2].first << " " << keypad[2].second << endl; for (int number : numbers) { if (isLeft(number)) { left_point = keypad[number]; answer.append("L"); } if (isRight(number)) { right_point = keypad[number]; answer.append("R"); } if (isMiddle(number)) { pair<int, int> key_point = keypad[number]; int left_dist = abs(key_point.first - left_point.first) + abs(key_point.second - left_point.second); int right_dist = abs(key_point.first - right_point.first) + abs(key_point.second - right_point.second); if (left_dist == right_dist) { if (hand == "right") { right_point = keypad[number]; answer.append("R"); } else { left_point = keypad[number]; answer.append("L"); } } else if (left_dist < right_dist) { left_point = keypad[number]; answer.append("L"); } else { right_point = keypad[number]; answer.append("R"); } } } return answer;}

0

Redux Saga

목차 Redux Saga Redux Middleware 만들기 Redux 사용하기 - 계산기 만들기 Redux 사용하기 Redux Saga 액션을 모니터링하고 있다가 특정 Action 이 발생하면 특정 작업을 진행한다. 비동기 작업을 진행할 때 기존 요청을 취소 할 수 있다. 특정 Action 이 발생했을 때 다른 액션을 디스패치 하거나 자바스크립트 코드를 실행할 수 있다. Generator 에 기반한 미들웨어 Generator 함수의 흐름을 특정 구간에 멈춰 놨다가 다시 실행 할 수 있다.return 값을 여러번 보낼 수 있다. import { delay, put, takeEvery, takeLatest } from "redux-saga/effects";const SET_DIFF = "counter/SET_DIFF";const INCREASE = "counter/INCREASE";const DECREASE = "counter/DECREASE";const INCREASE_ASYNC = "NCREASE_ASYNC";const DECREASE_ASYNC = "DECREASE_ASYNC";export const setDiff = (diff) => ({ type: SET_DIFF, diff });export const increase = () => ({ type: INCREASE });export const decrease = () => ({ type: DECREASE });export const increaseAsync = () => ({ type: INCREASE_ASYNC });export const decreaseAsync = () => ({ type: DECREASE_ASYNC });function* increaseSaga() { yield delay(1000); yield put(increase()); // put 은 dispatch 와 비슷한 개념}function* decreaseSaga() { yield delay(1000); yield put(decrease());}export function* counterSaga() { yield takeEvery(INCREASE_ASYNC, increaseSaga); yield takeLatest(DECREASE_ASYNC, decreaseSaga);}const initialState = { number: 0, diff: 1,};export default function counter(state = initialState, action) { switch (action.type) { case SET_DIFF: return { ...state, diff: action.diff, }; case INCREASE: return { ...state, number: state.number + state.diff, }; case DECREASE: return { ...state, number: state.number - state.diff, }; default: return state; }} import React from "react";import { useSelector, useDispatch } from "react-redux";import Counter from "./Counter";import { increase, decrease, setDiff, increaseAsync, decreaseAsync,} from "../modules/counter";const CounterContainer = () => { const { number, diff } = useSelector((state) => ({ number: state.counter.number, })); const dispatch = useDispatch(); // const onIncrease = () => dispatch(increase()); // const onDecrease = () => dispatch(decrease()); const onIncrease = () => dispatch(increaseAsync()); const onDecrease = () => dispatch(decreaseAsync()); const onSetDiff = (diff) => dispatch(setDiff(diff)); return ( <Counter number={number} diff={diff} onIncrease={onIncrease} onDecrease={onDecrease} onSetDiff={onSetDiff} /> );};export default CounterContainer;

0

Redux Middleware 만들기

목차 Redux Saga Redux Middleware 만들기 Redux 사용하기 - 계산기 만들기 Redux 사용하기 Redux Middleware 만들기Middleware 생성Dispatch 되는 이력을 콘솔로 찍는 로거를 만든다. const myLogger = store => next => action => { console.log(action); const result = next(action); // 반환하는 result 는 Container 에서 Disaptch 됐을 때 결과 물이 result return result;}export default myLogger; Middleware 적용applyMiddleware 함수를 이용해 Redux 에 미들웨어를 적용한다. import React from 'react';import ReactDOM from 'react-dom';import './index.css';import App from './App';import reportWebVitals from './reportWebVitals';import { createStore, applyMiddleware } from 'redux';import rootReducer from './modules';import { Provider } from 'react-redux';import myLogger from './middlewares/myLogger';const store = createStore(rootReducer, applyMiddleware(myLogger));ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root'));reportWebVitals();

0

네트워크 - HTTP 메시지 구조

네트워크 - OSI 7 계층과 TCP/IP 5계층 네트워크 - HTTP 네트워크 - HTTP Version 네트워크 - HTTP 메시지 구조 네트워크 - HTTPS Post not found: computer-science/network/tcp HTTP 메시지 구조 HyperText Transfer Protocol 의 약자로 HTML 문서를 전송하기 위해 만들어진 규약조건이다.HTTP는 TCP/IP 기반으로 되어있다. HTTP 통신 방식HTTP는 기본적으로 요청/응답 구조 Client 요청 MessageJson 데이터 curl –http1.1 http://localhost:8888/greeting -v -H “Content-Type: application/json” -d ‘{“hello”:”json”}’ POST /greeting HTTP/1.1Host: localhost:8888Accept: */*Content-Length: 16Content-Type: application/jsonUser-Agent: curl/7.71.1{"hello":"json"}

0

네트워크 - HTTP Version

HTTP Version 네트워크 - OSI 7 계층과 TCP/IP 5계층 네트워크 - HTTP 네트워크 - HTTP Version 네트워크 - HTTP 메시지 구조 네트워크 - HTTPS Post not found: computer-science/network/tcp HTTP/0.9 간단하게 HTML 객체 를 받아오기 위해 만들어진 프로토콜이다. 때문에 GET메서드 만을 지원한다. 멀티미디어 콘텐츠에 대한 MIME 타입이나, HTTP 해더, 버전 번호는 지원하지 않는다. HTTP/1.0 버전 번호, HTTP 헤더, 추가 메서드, 멀티미디어 객체 처리를 추가했다. 웹페이지와 상호작용하는 폼을 실현 하나의 커넥션에 하나의 요청과 하나의 응답만 가능 요청GET /greeting HTTP/1.0Host: localhost:18888Connection: closeAccept: */*User-Agent: curl/7.71.1 응답

0

네트워크 - HTTPS

네트워크 - OSI 7 계층과 TCP/IP 5계층 네트워크 - HTTP 네트워크 - HTTP Version 네트워크 - HTTP 메시지 구조 네트워크 - HTTPS Post not found: computer-science/network/tcp 네트워크 - HTTPSHTTPS의 마지막 S는 Over Secure Socket Layer의 약자로 보안이 강화된 HTTP라는 것을 알 수 있다. SSL/TLS 에서 HTTP 가 작동할 경우 HTTPS 라고 부른다. HTTPS 와 SSL 이 같은 것이 아닌 SSL 위에 올라가는 프로토콜 중 하나가 바로 HTTPS 다. 암호화 이점 기밀성의 원칙 에서 보면 통신 내용이 공격자에게 노출(snipping) 되는 것을 막을 수 있다. 무결성의 원칙 에서 보면 통신 내용을 타인이 함부로 변경 하는 것을 막을 수 있다. 기밀성의 원칙과 무결성의 원칙을 통해 서버와 클라이언트는 서로 신뢰를 할 수 있다. SSL (Secure Socket Layer)-