오늘은 중간에 생각난거지만 비로그인부분도 확인을 해야 하는데
비로그인 헤더를 수정하기로 했다.
헤더 부분의 css를 수정하고 링크를 달아줬는데
a태그일 때는 상관없던 줄과 색변경이 또 일어났다.
분명 link는 a태그 처리가 되고 a태그와 같은 적용을 받는데 변경되는 부분은
이해할 수 없었지만 이전에 처리한 것과 같은 방식으로 처리하려고 했다.
그런데 이 부분은 li의 css를 다르게 설정했어서 각 설정 내부에 a태그로 수정을 아래와 같은 방식으로 처리했다.
li:first-child {
border: 1px solid #7aa7c7;
background-color: #e1ecf3;
color: #2c5877;
a {
text-decoration: none;
}
a:visited {
color: #2c5877;
}
}
li:nth-child(2) {
border: 1px solid #1095fa;
background-color: #1095fa;
color: #ffffff;
a {
text-decoration: none;
}
a:visited {
color: #ffffff;
}
}
상단의 돋보기를 넣어주는데 absolute로 조정해 무리없이 넣어줄 수 있었으나
같은 컴포넌트 내에서 상태값을 통해 내부 css를 관리하다보니 이상한 충돌이 난 것인지
login 상태에서는 className이 부여되지 않는 이상한 일이 벌어졌다.
조건을 반대로 만들고 순서를 바꿔도 적용되지 않고 하나의 클래스명만 들어가는데
검색을 해봐도 이런 일은 없는 것 같아 당황스럽다.
이유는 너무 간단했다..
로그인 헤더와 비로그인 해더를 상태값으로 나타내주긴 하지만
div값 자체를 통으로 추가하거나 날렸기 때문에
이 헤더는 로그인시에는 보이지 않는 헤더 부분이었기 때문에 이 부분의 css를 아무리 건드려도 통하지 않는 것이었다.
한마디로 상위 div가 어차피 사라지기 때문에 상태값을 여기서 신경쓸 필요가 없었다.
CT(1).가장 긴 바이토닉 부분 수열이라는 문제는 조금 특이했는데 특정 포인트 까지는 올라가가는 부분 수열의 갯수를 측정하고 그 뒤로는 내려가는 부분 수열을 갯수를 측정해야 하는 문제였다. 처음에는 당황했지만 생각보다 어렵지 않은 문제였는데 올라가는 부분 수열은 1,3,2,5,4,7,6,2,8,1이라는 숫자가 있는 경우 1,3,5,7,8으로 올라가고 반대로 내려가는 부분 수열은 뒤에서부터 카운터 할 경우 (역순) 1,2,6,7같은 느낌으로 dp에 담기고 그 dp를 합친 다음 max값을 찾으면 되는 간단한 문제였다.!!
코드는 아래와 같다.
let input = `10
1 5 2 1 4 3 4 5 2 1`.split('\n')[1].split(' ').map(Number)
let dp = new Array(input.length).fill(0) // 기존 오르막 dp
let dp2 = new Array(input.length).fill(0) //내리막 dp
let dpSum = new Array(input.length).fill(0) //합칠 dp
for(let i = 0 ; i < input.length ; i++){
let max = 0 //비교 max값 초기화
for(let j = 0 ; j < i ; j++){
if(input[i] > input[j] && dp[j] > max){ //현재 max값 찾기 위한 조건
max = dp[j] // 현재 비교값보다 작은 숫자중 최대 max값 찾은 후
}
}
dp[i] = max +1 // 현재값이 max값을 가진 숫자보다 크기 때문에 그 값에서 dp+1해주기
dpSum[i] += dp[i] //dpSum에 현재값 저장
}
for(let i = input.length-1 ; i >= 0 ; i--){//위의 함수 역순 실행
let max = 0
for(let j = input.length-1 ; j >= i ; j--){
if(input[i] > input[j] && dp2[j] > max){
max = dp2[j]
}
}
dp2[i] = max +1 //역순진행에서 최대값 dp 구해주기
dpSum[i] += dp2[i]-1 // 현재 값이 계산에서 겹치므로 -1 해주고 더해주기
}
console.log(Math.max(...dpSum)) //Max값 찾아서 출력
CT(2).짜증나는 문제가 또 나타났다.. js로는 풀 수 없는 문제인데 공식 답변이 1년 전 node.js의 업데이트로 인해 기본 용량이 커져서 기존 정답자들의 코드로도 통과하지 않는다고 한다.
이런 메모리가 적은 문제들은 정답자를 확인하고 존재하면 진행하는데 중간 패치로 인해 제출자체가 의미 없이질줄은 몰랐다..ㅠㅠ
이 문제만 풀면 골드3이 확정이었기 때문에 더 신나게 제출하고 더 크게 좌절하는 감도 있다.
게다가 이 문제는 클래스 4 문제기 때문에 이중 삼중으로 스트레스를 받는다.
일단 통과될 코드는 아래와 같다.
let input = `3
1 2 3
4 5 6
4 9 0`.split('\n').slice(1) // input 받아오기(숫자 날리기)
let dp1 = []
let dp2 = []
let num = input.length
for(let i = 0 ; i < num ; i++){ //dp값에 깊은복사 느낌으로 데이터 전달
input[i] = input[i].split(' ').map(Number)
dp1.push([...input[i]])
dp2.push([...input[i]])
}
for(let i = 1 ; i < num ; i++){
for(let j = 0 ; j < 3 ; j++){ //3칸기준으로 내려가기 때문에 0~2 고정
if(j === 0 ){
dp1[i][j] += Math.max(dp1[i-1][0], dp1[i-1][1]) // 0이면 0,1에서 올 수 있다
dp2[i][j] += Math.min(dp2[i-1][j], dp2[i-1][j])
}
else if(j === 1){
dp1[i][j] += Math.max(dp1[i-1][0], dp1[i-1][1], dp1[i-1][2]) // 1이면 0,1,2 모든 방향에서 가능하
dp2[i][j] += Math.min(dp2[i-1][0], dp2[i-1][1], dp2[i-1][2])
}
else if(j === 2){
dp1[i][j] += Math.max(dp1[i-1][1], dp1[i-1][2]) // 2면 1,2에서만 올 수 있다.
dp2[i][j] += Math.min(dp2[i-1][1], dp2[i-1][2])
}
}
}
console.log(Math.max(...dp1[num-1]), Math.min(...dp2[num-1])) //최하단 값들의 max, min을 출력

'회고' 카테고리의 다른 글
| [Pre-Project 개발일지]-12 (1) | 2022.09.05 |
|---|---|
| [Pre-Project 개발일지]-11(주말) (0) | 2022.09.04 |
| [Pre-Project 개발일지]-9 (0) | 2022.09.02 |
| [Pre-Project 개발일지]-8 (0) | 2022.09.01 |
| [Pre-Project 개발일지]-7 (0) | 2022.08.31 |
