개발공부 32

[LeetCode] 1442. Count Triplets That Can Form Two Arrays of Equal XOR

https://leetcode.com/problems/count-triplets-that-can-form-two-arrays-of-equal-xor/description/?envType=daily-question&envId=2024-05-30문제 출처 비트연산자, 그 중에서도 XOR의 특성을 알면 쉽게 풀 수 있는 문제였다. 요즘 리트코드 데일리 문제를 하나씩 푸는 재미에 꽂혔다. 작년 이맘 때 즈음엔 비트연산자 문제가 나오면 스트레스를 받았는데, 요즘엔 오히려 비트연산자가 더 재미있다는 느낌을 받았다.  이 문제를 이해한 바로는 아래와 같다.  전체 배열에서 시작 인덱스 i, 끝 인덱스 j를 정한다. 그리고 그 끝 인덱스의 다음인 j+1에서, 또다른 끝 인덱스 k를 정한다.이 때 i부터 j까지 XOR한..

[프로그래머스] PCCP 2번. 석유시추

https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr BFS나 DFS를 이용해 푸는 것은 바로 파악을 했다. 그런데, 이 문제에서 고민해야 할 사항은 따로 있었다. 어떻게 방문한 가로축 지역들을 보관할 것인가? 어떻게 가로축 데이터들을 누적처리할 것인가? 이를 위해 Set, js의 배열의 특성을 활용했다. JS의 배열의 원소는 타입이 같을 필요가 없다는 점과, Set을 이용해 방문한 모든 지역의 가로축 좌표를 담아도 중복이 없게 받을 수 있다는 점..

[부스트캠프] 수료, 네트워킹, 그리고 앞으로....?

12/15 : 부스트캠프 수료 12/16 : 네트워킹 데이 진행 12/15 6개월의 부스트캠프가 끝났다. 4주간의 챌린지, 8주간의 학습 스프린트, 6주간의 그룹 프로젝트였다. 생각보다 짧은 기간내에 때려넣은 지식이 많다보니 아카이빙에 생각보다 많은 시간을 써야겠다는 생각이 들었다. 최종 발표를 하면서 느낀건, 우리가 생각하지 못하는, 정말 다양한 서비스에서 개발자가 일할 자리가 있다는 것? 우리가 생각을 넓히면 충분히 '개발'이라는 분야는 발전할 수 있겠다는 안도감과, 앞으로 어떤 분야에 대해서 나는 '개발'이라는 단어를 가지고 다가갈까를 생각하게 되었다. 다른 팀원들의 발표를 들으면서, 어떤 고민을 했고 이것도 내가 해볼까? 라는 생각도 가지게 되었다. 전체적으로 백엔드로써 느끼는 것은, '서버의 스..

[부스트캠프] 7, 8주차 회고. 같이 쓰는데에는 이유가 있다!

7, 8주차 과제를 통해 실제 웹에서 우리가 사용하는 기술의 원리를 이해하고, 이를 구현해볼 수 있는 과제를 받았다. 하지만, 뭔가...뭔가였다...(몬가..몬가임..) 그래서 나만의 새로운 과제를 하나 두고 과제를 해결해볼까 라는 생각이 들었다. 그것이 무엇일까? 바로 그룹 프로젝트 준비였다. 지금 바로 그룹 프로젝트의 코드들을 만든다는 것이 아니라, 무슨 상황에서건 필요할 수 있는 기술들을 하나씩 공부했다. nest.js의 공식 문서를 읽으면서 내가 공부한 이론과 원리들이 사용되는 방식에 대해서 추론하고, 이를 구현해보는 식으로 학습했다. 이런 방식으로 2주 정도를 학습을 했다. 이를 통해 느낀 부분들을 몇 가지 여기서 정리해봐야겠다. SpringBoot, NestJS는 우리가 생각하는 것 보다 더 ..

[부스트캠프] 6주차. 공부도 했지만 딴짓도 했지요!

6주차에는 5주차 과제에서 조금 더 수정하는 부분들이 많긴 했다. 자세하게 어떤 부분을 했다고 이야기할 순 없기에, 조금 추상화 시켜야겠다. (백엔드 특 : 추상화, 객체지향 개좋아함) 조금 더 객체지향적이게? 부스트캠프의 과제가 정확히 무엇인지 이야기할 순 없다. 하지만 비슷한 예시를 들어보자. class Sentence { nouns:string[]; verbs:string[]; constructor(inputString:string) { inputString.split(" ").forEach(words => { //띄어쓰기로 나눈 단어들을 의미에 따라 인스턴스 배열에 넣는다. }) } } 이런 코드가 있다고 생각해보자. 여기에서 Sentence라는 객체를 만들어두고, 이 부분에서 각 배열을 가져온 ..

[부스트캠프] 5주차. 페어 프로그래밍과 추상화

5주차에 페어 프로그래밍이라는 것을 했다. 자바 스프링으로 프로젝트할 때에도 페어 프로그래밍과 유사품을 경험해보긴 했지만, 진짜 페어 프로그래밍이 무엇인지 생각해보진 못했다. 실제론 내비게이터(뒤에서 보면서 첨언하는 방식)와 드라이버(직접 코드를 작성하는 방식)를 두고 개발을 한다고 한다. 어찌보면 기존에 했던 방식과 비슷했다. 디스코드로 화면을 띄우고, 이를 보면서 같이 보면서 한 사람은 로직을 짜고, 이에 대해 실시간으로 같이 보면서 소통하는 방식이었다. 25분마다 번갈아 가며 드라이버를 바꾸는 경우도 있었지만, 나와 페어는 그렇게까지 하지는 않았다. 대신에 깃을 조금 더 공부해서, 이를 더 수월하게 하는 방법을 생각했다. 각자의 브랜치를 만들고, 합치는 브랜치에서 이를 모았다. 이를 통해 upstr..

[부스트캠프] 4주차 회고. 한 템포가 끝나고

4주차가 끝나고, 멤버십 첫 과제를 마무리 지었다. 그간 배운것도 많고, 시도해본 것도 많았다. 생각해본 부분들도 상당히 많았는데, 과연 프론트엔드가 객체지향이 좋을까? 함수형으로 만들어주는게 더 좋을 수 있다고도 느낀다. js의 체이닝에서 생각보다 map, filter등의 로직이 중첩되는게 많았는데, 이걸 js의 자유로움(?)으로는 해결할 수 있지 않을까 생각했다. 프로토타입 함수를 만들어, 체이닝을 직접 구현할 수 있다는 장점이 있었다. 이게 개꿀인게, 체이닝이 길어지고, 반복되게 사용할 경우 분리할 수 있다는 장점이 있었다. css가 너무 어렵다.... 프론트엔드 개발하시는 분들이 대단하다고 느껴질 정도였다. 10월에 인프런 리액트 인강을, css와 html의 기본은 부스트코스 강의를 보겠다는 계획..

[부스트캠프] 3주차 회고. 슬슬 즐기기 시작했다.

부스트캠프 멤버십이 시작된지 3주가 넘어, 지금은 4주차 첫날이다. 챌린지 처음엔 js에서 모든 변수와 함수를 var, function으로 만들었던걸 생각하면, 나름 장족의 발전을 하고있다고 생각한다. 자바 덕분이기도 하다. 자바를 1년 반 정도 해보니까, 그래도 자바스크립트가 금방 숙달되는 것 같다. 몇몇 유튜버들이 언어 하나를 배우면, 다른 언어를 금방 배운다고 한 말이 진짜같다. (실제 라틴어를 기원으로 하는 언어들도 하나를 배우면 금방 다른 라틴계 언어도 배울 수 있다고 한다) 사실 현타가 한번 세게 왔었다. 개발을 하면서, 진짜 js가 맞을까? 지금 js를 시작하면서 내가 너무 하찮아지기도 했다. 개인적으로 하는 팀 프로젝트가 있는데, 백엔드팀에서 스프링프레임워크로 개발을 하고있었다. 다른 사람..

[이론 공부] 테스트를 조금 더 많이 해보는건 어떨까?

프로젝트를 해보면서, 가장 중요하게 여겼던 것이 테스트였다. 기능을 빠르게 만들어 바로 적용시키기보다, 테스트를 통해 모든 경우의 수를 고려해, 이에 따른 결과들을 미리 확인 할 수 있다는 장점이 있기 때문이다. 여태까지는 생각 없이 테스트를 만들었다. 도메인 : Junit을 이용한 테스트 service(비즈니스 로직) : SpringBootTest를 이용한 테스트 controller : SpringBootTest를 이용한 테스트 이런 방식으로 단위테스트들을 만들었는데, 가장 큰 문제가 너무 무겁다는 것이다. 해결하기 위해 Mockito를 공부하다가 단위테스트, 통합 테스트, 인수 테스트를 알게 되었다. 단위 테스트 단위 테스트는, 말 그대로 '단위' 단위로 테스트를 한다는 뜻이다!!!( 말 참 재밌네 ..