오늘 할일
-
채용공고 읽기
-
알고리즘 문제 풀기
-
기술면접 준비
오늘 한 것 & 배운 내용
알고리즘 문제 풀이
- 명령 프롬프트
- 내풀이
- 다행히 비교하는 파일의 길이가 같아서 한글자씩 뽑아서 비교해서 다르다면 ?로 바꿔주면 될거 같아서 그렇게 풀었고 통과하였다
- 다른사람풀이
- 나와 비슷하게 풀었지만 나처럼 String의 글자를 만드는 대신 새로운 String에 char을 하나씩 추가해주는 방법으로 푸는게 더 성능이 잘나왔다
- 완전제곱수
- 내풀이
- 1부터 완전 제곱을 해가면서 그값이 M과 N사이에 있는지 확인을 하면서 그 합과 최소값을 구했다
- 합이 0이라면 완전제곱이 없는 걸로 간주하고 -1을 출력하였다
- 다른사람풀이
- 탐색의 범위를 1부터 제곱을 해간게 아니라 M의 제곱근을 올림한수(Math.ceil(Math.sqrt(M)))부터 Math.floor(Math.sqrt(N))으로 두어서 탐색시간을 줄였다
- 처음에 이렇게 풀어보고 싶었는데 제곱근을 생각을 못해서 이런방식으 풀지를 못했는데 도움이되었다
- Math 함수들을 잘기억해두면 이런 수학문제에는 도움이 많이 될 것 같다
- 풀이 : https://mizzo-dev.tistory.com/entry/baekjoon1977
-
내풀이
- 한문자열 당 최대길이가 15개 이니까 15개 짜리 String 배열을 만들고 문자열에서 각 자리수에 해당하는 char를 뽑아서 해당 배열에 값에 더해주는 방법으로 풀었다
- String 배열은 null로 초기화 되기때문에 맨처음에 한번 배열을 ""로 초기화 시켜줄 필요가 있었다
- 더해진 배열을 순차적으로 print하면서 null 이면 반복문을 멈추게해서 값이 있는 곳에만 출력이 되도록 설정을 하였다
-
다른사람풀이
- 내풀이
- 입력값을 StringBuilder로 만들어 reverse하여 앞에 글자들을 비교하기로 계획하였다
- substring을 하여 반을 자른값과 reverse하여 반을 자른값이 같으면 true가 나오도록 구현을 하고 싶었다
- StringBuilder에도 substring()이 있는 것을 배웠다
- 다른사람풀이
- 내 풀이와 비슷하지만 나처럼 구지 앞에를 잘라서 비교할 필요없이 reverse() 한 값과 원본 값을 단순히 비교만 해주어야 되는 문제였다
- 정의 자체가 거꾸로 돌려도 같은 것이기 때문에 그대로 살려서 생각을 했으면 되는 문제였던것 같다
- Stringbuilder 객체에 .eqeal해서 reverse()한 객체랑 비교를 했더니 무조건 true가 나와서 toString으로 변환한 후에 비교를 해주어야 했다
- 이유를 찾아보니 Stringbuilder 클래스는 오버라이드된 equals를 지원하지 않는다는 설명이 있었다
-
내풀이
-
입력받은 String의 char를 하나씩 꺼내서 A~Z에 해당하는지 a~z에 해당하는지 구분해서 +13을 해준다
-
해당값이 'Z'나 'z'를 넘어가면 13을 더하지 않고 13을 빼주기 위해 -26을 한다
- 13을 빼주는 의미는 알파벳은 26자리이기 때문에 +13이 Z를 넘어가능 경우 -13을 해주면 원하는 값으로 이동하기 때문이다
-
변경된 값을 하나씩출력한다
- 숫자인경우 조건문을 거치지 않아 그대로 출력되게된다
-
성능을 높이기 위해 StringBuilder를 사용하던 것을 제거하거 그냥 print 해보았지만 동일한 성능이 나왔다
- print 하던 것을 제거하고 BufferedWriter를 사용해보았는데도 동일한 성능이 나왔다..
- StringBuilder를 추가하고 BufferedWirter를 통해 출력해보았는데도 동일한 성능이 나왔다..
- 오히려 StringBuilder를 통해 값들을 등록하고 println했을 때 가장 좋은 성능을 보였다..
- char를 각각 print하는 것보다 StringBuilder로 합쳐서 한번에 print하는게 성능에 도움이 된다
- BufferedWriter로 출력할게 많지 않은 이상 그냥 print하는게 더 성능에 도움이 된다
-
문제를 풀기전에 알파벳은 공책에 쭉 나열했는데 그게 문제풀기에 도움이 많이되었다..
-
다른사람풀이
- 내풀이와 크게 다르지 않아서 다음문제로 넘어갔다
-
다른 사람 풀이
- 출력될 수 있는 나머지가 0~ Z까지 모두 포함된 char[]을 만들어 나머지를 구한 값을 index로 하여 출력하는 방법도 있었다
채용공고 읽기
-
용어정리
-
UBIQUITOUS LANGUAGE
- DDD(Domain Driven Development)에 중요한 요소중 하나
- 도메인 어휘를 이해관계자들이 공통적으로 의미를 이해할 수 있도록 정의하는 것
- 대화, 문서, 코드 등 모든 곳에서 사용하여 의사소통의 복잡성을 줄이는 역할
- DDD를 잘모르고 있기 때문에 아직 확 와닿지는 않지만 그래도 공통의 언어를 사용하는 것이 중요하고 그렇기 때문에 명명에 고심해야 한다라는 뜻으로 일단 정리를 해보았다
- 참고
-
Jira
입사 지원 하기
- 아침에 처음 이력서 지원곳에서 답신이 왔는데 서류 전형에서 탈락했다는 답장이 왔다
- 떨어진게 신경이 쓰이는 것 보다는 일단 확답이 왔다는 것에 뭔가 마음이 놓였다
- 지금 떨어진게 내 이력이 부족해서인지 아니면 이력서/자기소개서/포트폴리오의 문제인지 궁금하였다
- 합격 여부로만 결과가 나오니 어떻게 피드백을 해야될지 잘모르겠는게 사실이다..
- 이부분은 조금더 결과를 지켜보다가 서류합격률이 너무 낮으면 형식을 수정하는 걸로 결정하기로 하였다
- 데이터 라벨링 관련 기업에 지원하기위해 조사를 하면서 데이터 라벨링 산업과 교육을 통해 데이터 라벨러로 활동할 수 있다는 점이 굉장히 흥미로웠다
- AI 관련 서비스는 계속 성장할 수 밖에 없기 때문에 이런 도메인들을 이해하고 있는 것은 도움이 많이 될 것 같다
기술 면접 준비
- 동기(Synchronous) 방식
- 요청을 보내고 실행이 끝나면 다음 동작을 처리하는 방식
- 순서에 맞추어 진행되기 때문에 제어하기 쉽다.
- 콜센터 직원의 처리하는 방식
- 비동기 방식
- 요청을 보내고 해당 동작의 처리 여부와 상관없이 다음 요청이 동작하는 방식
- 작업이 완료되는 시간을 기다릴 필요가 없기 때문에 자원을 효율적으로 사용할 수 있다
- 작업이 완료된 결과를 제어하기 어렵다
- 비동기 방식의 예제로는 이메일이 있다.
-
MSA란?
- Microservice Architecture는 모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 Monolithic Arcitecture의 한계점을 극복하고자 등장했다
- MSA는 1개의 시스템을 독립적으로 배포가능한 각각의 서비스로 분활한다
- 각각의 서비스는 Restful API를 통해 데이터를 주고 받으며 1개의 큰 서비스를 구성한다
- 장점
- 일부 서비스에 장애가 발생하여도 전체 서비스에 장애가 발생하지 않는다
- 각각의 서비스들은 서로 다른 언어와 프레임워크와 DB로 구성될 수 있다
- 서비스의 확장이 용이하다
- 서비스별로 독립적으로 배포가 가능해 배포시간이 짧다
- 부분적으로 scale-out이 가능하여 성능상으로 이득이 된다
- 단점
- 서비스가 분리되어 있어 테스팅이나 트랜잭션 처리 등이 어렵다
- 서비스 간에 Restful API로 통신하기 대문에 그에 대한 비용이 발생한다
-
참고 자료
내일 할일
-
채용공고 읽기
-
입사 지원하기
-
알고리즘 문제 풀기
-
기술면접 준비