오랜만에 출근했기 때문에 일정을 한번 확인해주고 주 고객사쪽 케이스 등록 작업을 마쳤다.
파일 생성 방식이 아닌 링크 첨부 방식으로 파일 수신 방식이 바뀐 것이 황당했는데
고객사를 뺴고 협력사측에서 일방적으로 고객사에 통보한 느낌이 강했고
실제로 엉망인 링크 방식을 보면 의견이 바뀔까 싶어서 해당 개체 생성 및 연결 후
링크 연결이 어떻게 보이는지 예시를 고객사에 전달했지만 그렇게 해달라는 답변만 들었다.
이후 회사 내에서 진행되는 리팩토링 스터디 관련 책 다운로드 및 메모 기능을 확인했는데
노트북으로는 되지 않고 핸드폰이나 패드에서만 된다는 것 같아서 문제가 있을 것 같았다.
일차적으로 패드에서 공부를 하면 될 수는 있지만 패드를 회사에 계속 들고다니기도 그렇고
책 대용으로 패드를 보기에도 불편하고 굳이 전자책을 해서 왜 이렇게 써야 하는가 싶긴 헀는데
사실 메모를 굳이 안하고 보면 되기 떄문에 그냥 그러려니 하고 전자책으로 읽기로 했다.
이후 연락처 연결 관련 문의가 들어왔는데
조건들이 다들 너무 황당했고 왜 이걸 굳이 하는건가 싶은 내용이 많이 존재했다.
특히 이걸 이런 방식으로 쓰면 SFDC와 해당 홈페이지 사용자간에 관계도 정립이 되지 않고
기존 내용과 중복 처리도 모호했기 때문에 처리 가능 내용과 문제가 생길 수 있는 부분에 대해 정리해서 발송했다.
중간에 특정 인터페이스 처리 중 IsActive 처리를 해달라는 내용이 있었기 때문에
점심시간이지만 해당 내용을 배포했고
긴급으로 SAP 전송 실패 내용이 날아와서 확인해야 했다.
SAP 전송 에러의 경우 SFDC쪽에서 에러가 발생했기 때문에 SAP 잘못이 아닌 줄 알았는데
로그를 자세히 확인하고 내용을 확인해보니 response를 수신 후 에러가 발생했기 때문에
비정상적인 값을 반환해서 에러가 발생한 것으로 추정되었고 실제로 곧 다시 SAP 서버 정상화 후 정상 작동했다.
회사 내 알고리즘 스터디에 대해 이야기해보자는 언급이 어제 나왔기 때문에 회의를 했는데
막상 다들 원하는 방향도 다르고 강도도 다르고 푸는 언어도 달랐기 때문에 합의가 쉽지는 않았고
일단 제일 널널한 방향으로 하면서 추가적으로 하고 싶은 사람들은 추가할 수 있는 것으로 합의되었다.
Form 관련 답변이 나와서 해당 내용에 대해서 어드민분에게 공유드렸고
그 이후에는 내가 처리하는 방향으로 마무리하겠다고 말씀드린 다음
고객사쪽에 답변 가능한 부분 먼저 답변드리고 나머지는 협력사쪽 인터페이스 정의로 마무리하겠다고 전달했다.
중간에 인터페이스 에러 관련 확인 요청이 또 들어왔는데
이번에도 로그가 찍혀있지 않은 것으로 인터페이스 에러의 99%정도는 SAP 문제다 라고 생각하면 될 것 같다.
SAP쪽에서 뭔가 바로 확인을 하지 못하기 때문에
해당 내역들의 로그를 확인 후 없다는 것을 발송하면 그제서야 답변하는 느낌이 있는데
유지보수시간이 차감되는데 굳이 이걸 이렇게 로그확인시간을 가져야 하나 싶긴 하지만
일단 고객사 요청이기도 하고 돈을 받는 일이라서 빠르게 확인해서 유지보수 시간 절감하는 쪽으로 처리했다.
내일은 리팩토링 스터디도 진행될 예정인데
메모가 안되기 떄문에 조금 졸릴 수 있지 않을까 걱정되긴 한다.
(1).백준 14003번 가장 긴 증가하는 부분 수열 5는 어제 시간복잡도로 틀렸던 문제인데
for문 내부에서 lastIndexOf를 사용했기 때문에 발생한 것으로 추정됐고
해당 내용이 최종 인덱스를 역순 for문으로 돌아야 하나 잠깐 고민했지만 그건 시간복잡도가 똑같을 것 같았고
결국 각자 바라보는 위치별 최종 index는 하나씩이기 때문에 map 같은 느낌으로 접근하려고 하다가
dp처럼 배열 내부에 바로 넣어도 0~n까지 진행되기 때문에 전혀 문제가 없을 것 같아서 배열에 담아줬다.
복잡한 로직도 없이 그냥 배열 하나에 넣고 for문을 대체하는 것을 보니
간단한 작업 하나만으로도 시간복잡도가 이렇게 개선되는구나 신기하기도 하고
잘못된 코드 한줄로 인해서 어떤 문제가 발생할 수 있는지도 다시 한번 생각하는 계기가 되었다.
lastIndexOf를 lastIndexCheck로 바꾼 부분을 제외하면 어제 푼 낮은 단계 문제와 동일하기 때문에
대체된 코드를 제외한 나머지에 대한 설명은 생략했다.
const input = `6
10 20 10 30 20 50`.split('\n')[1].split(' ').map(Number)
const arr = []
const index = []
const beforeIndex = []
const result = []
const lastIndexCheck = []
for(let i = 0 ; i < input.length ; i++){
let low = 0
let high = arr.length
while(low < high){
let mid = Math.floor((low + high)/2)
if(arr[mid] < input[i]){
low = mid + 1
}
else{
high = mid
}
}
if(low < arr.length){
arr[low] = input[i]
}
else{
arr.push(input[i])
}
index.push(low)
lastIndexCheck[low] = i
if(low > 0){
beforeIndex[i] = lastIndexCheck[low-1]
}
}
let now = index.lastIndexOf(arr.length-1)
while(now != undefined){
result.push(input[now])
now = beforeIndex[now]
}
console.log(arr.length)
console.log(result.reverse().join(' '))
'회고' 카테고리의 다른 글
[개발일지] - 471 (3) | 2024.10.16 |
---|---|
[개발일지] - 470 (5) | 2024.10.15 |
[개발일지] - 468(주말) (0) | 2024.10.13 |
[개발일지] - 467(주말) (2) | 2024.10.12 |
[개발일지] - 466(연차) (0) | 2024.10.11 |