오늘은 프로젝트가 아닌 온보딩 과제를 진행했다.
프로젝트를 진행하며 배운 commit 관리를 했고
규정을 보니 CRA로 생성 후 Axios로 소통하며
StyledComponents로 css를 관리하고
React-Icons에서 소소한 아이콘은 나중에 여유되면 추가하고
netlify로 배포한 링크를 README에 넣어주는 방향으로 갈 것 같다.
'/'(메인)에 로그인/회원가입을 구현
'/todo'에 투두 리스트 표기
컴포넌트들을 힘들게 분리한 다음
axios, router, styledComponents 등을 설치하고
회원가입/로그인 페이지 만들기를 시작했다.
다시 기능분석을 하자면
Assignment1 - 유효성검사, disabled처리
Assignment2 - 회원가입/로그인 -> /todo 이동 및 localStorage 저장
Assignment3 - @토큰 보유시 '/' -> '/todo',미보유시 '/todo' -> '/' 리다이렉트
Assignment4 - todoList 내용 및 완료여부(checkbox), 하단 입력창 추가
Assignment5 - 수정, 삭제기능 (input:disabled로 css), 취소/확인
분할된 styledComponents에 적응하고 레이아웃을 끝낸 다음
로그인/회원가입 기능구현을 하려고 하는데
이 부분은 이미 하긴 했는데 시간이 오전 8시가 넘어서
이제부터는 12.7일자 내용으로 채워야 할 것 같다.

1.File System은 이름 그대로 파일을 관리하는 시스템이다.
백준 문제를 풀 때도 주로 사용되던 require('fs')의 'fs'가 바로 File System의 약자로
주 역할은 파일 공간 관리, 접근 제한 및 허용, 무결성 유지, 설계 제한이 있다.
접근 방식으로는 순차 접근, 직접 접근, 색인 접근이 존재하며
구조는 Single-level, Two-level, Tree-Structured, General graph 형태가 존재한다.
순차 접근 방식 - go, rewind의 방향지정과 read, write의 기능만 수행하는 간단한 접근방식
직접 접근 방식 - 현재 위치 변수를 조절해 순서 제약없이 접근하는 방식
색인 접근 방식 - 파일별 명칭 부여를 통해 접근하는 방식
Single-level directory - 한 계층에서 id값을 가지고 구분하는 방식
Two-level directory - 사용자마다 계층을 하나씩 부여받아 사용하는 방식
Tree-Structured directory - 트리구조 형태로 0,1을 통해 파일/폴더를 구분한다.
General graph directory - 그래프 구조로 순환하지만 링크를 통해 우회가능
(1).백준 전투 드로이드 가격은 각 부품별 가격과 수량을 가지고
총 금액이 얼마가 되는지 소수점 둘째 자리까지 출력하는 문제였다.
특이하게도 이런 문제들은 .00이라도 출력하기를 요구하는데
이런 특이한 요구사항들을 많이 겪어봐야
실제로 시험에서 특이 요구사항을 빠르게 해결할 수 있을 것 같다.
각각 처리할 수 있지만 가격 및 부품 숫자가 변동될 수 있음을 고려해(재사용)
price 배열과 부품 갯수 배열을 만든 다음 for문으로 곱셈처리했다.
결과를 모두 sum에 추가한 후 Math.round(sum*100)/100으로
둘째 자리 아래의 숫자를 버리고 if문으로 .00을 체크해 추가했다.
let input = `3
20 10 14 3 9
19 17 12 8 10
11 9 8 22 33`.split('\n')
let result = []
for(let i = 1 ; i < input.length ; i++){
let partsNum = input[i].split(' ').map(Number)
let price = [350.34, 230.90, 190.55, 125.30, 180.90]
let sum = 0
for(let j = 0 ; j < price.length ; j++){
sum += (Math.round(partsNum[j]*price[j]*100)/100)
}
let numStr = '$' + String(sum)
if(numStr[numStr.length-3] === '.'){
result.push(numStr)
}
else if(numStr[numStr.length-2] === '.'){
result.push(numStr + '0')
}
else{
result.push(numStr + '.00')
}
}
console.log(result.join('\n'))
(2).프로그래머스 문자열 나누기는 문자열을 능숙히 다룰 수 있는지 묻는 문제였다.
한글자씩 읽어가며 첫번째 글자의 갯수와 나머지 글자의 합이 같아지는 시점마다 문자열을 분할시킨 다음 총 분할된 문자열이 몇개인지를 묻는 문제였다.
이 문제는 처음이지만 조건부 while 분할은 다뤄본 기억이 있기 때문에
3분도 걸리지 않아 해결할 수 있었다.
해결 방식은 첫번째 글자 저장 및 갯수 저장(default = 1)
현재 문자열에서 얼마나 이동했는지를 확인하기 위한 count
첫번째 글자가 아닌 글자들의 갯수를 저장할 변수 4가지를 선언한 후
* while문 내부 무한루프를 막기 위해 길이 초과를 방지해준 후(snippet에서는 곤란하다)
첫번째 글자 갯수 변수와 나머지 글자 갯수 변수 비교를 한 다음
같아지거나 문자열이 종료된 경우 자른 문자열 갯수를 추가하는 방식으로 진행했다.
function solution(s) {
let answer = 0;
for(let i = 0 ; i < s.length ; i++){
let now = s[i]
let count = 0
let nowNum = 1
let anotherNum = 0
while(i+count < s.length && nowNum !== anotherNum){
count++
if(s[i+count] === now){
nowNum++
}
else{
anotherNum++
}
}
answer++
i += count
}
return answer;
}'회고' 카테고리의 다른 글
| [취업준비일지] - 49 - 스터디 프로젝트 10일차 (0) | 2022.12.08 |
|---|---|
| [취업준비일지] - 48 - 원티드 온보딩 인턴쉽 사전과제 (0) | 2022.12.07 |
| [취업준비일지] - 46 - 스터디 프로젝트 8일차 (0) | 2022.12.05 |
| [취업준비일지] - 45 - 스터디 프로젝트 7일차 (0) | 2022.12.04 |
| [취업준비일지] - 44 - 스터디 프로젝트 6일차 (0) | 2022.12.03 |
