250601

Regular Kim·2025년 6월 1일
0

회고

목록 보기
93/104

250601 회고 💬

SSAFY 1학기가 끝났다. 동시에 2025년도 상반기가 끝났다. 1학기 내에 취업하기가 목표였는데,, 💀 하반기에는 꼭 성공하도록하자! 싸피 방학이 시작됐다. 시간이 많아진 만큼 건설적으로 사용할 계획이 필요하다.

Keep 👍

알고리즘

알고리즘 문제 풀이를 계속 하고있다. 그날그날 기분따라서 아무 주제나 잡고 문제를 푼다.

  • Z : 분할정복, 재귀 문제다. 재귀에 약하다. 분할정복에도 약하다. 이 문제 너무 어려웠다. 감잡기 힘든 문제임 ㅠ

출퇴근 자투리 공부

리팩토링 강의를 듣고 있다. 기존에 객체 구분없이 만들어진 클래스들을 리팩토링하는 내용이다.

SOLID 원칙을 공부했다.

  • 단일 책임 원칙(S)을 공부했다. 입력을 받는 클래스와 출력을 하는 클래스를 분리하기, 상수를 어디에 두어야하는지 결정하기, 도메인 지식 획득하기 등의 내용을 학습했다.
  • 개방 폐쇄 원칙(O)을 공부했다. 기존 하나의 클래스로 뭉뜽그려 처리하던 로직을 개선하는 내용이다. 추상 클래스로 공통 api를 정의해두고 여러 구체 클래스를 정의하여 상황에 맞게 인스턴스를 사용하는 방법을 살펴봤다.

개인 공부

스프링 프로젝트를 진행할 때 properties, yml 등 외부 파일에서 설정 값을 가져오는 방법을 정리해봤다. 여기서 내용을 확인할 수 있다.

개인 프로젝트에 개선이 있었다.

완료 🙌 🙌 🙌 🙌
프론트 리팩토링
- axios 공통화 -> 인스턴스 사용하도록 변경
- 로그아웃 로직 개선

axios 사용 방법을 개선했다. 기존에는 페이지마다 axios를 선언하여 매번 헤더와 쿠키 사용 설정을 진행해줘야했다. 이제는 api 라는 이름의 인스턴스를 호출하기만하면 기타 설정은 통일된 axios를 사용할 수 있다.

export const api = axios.create({  
  baseURL: BASE_URL,  
  withCredentials: true,  
})

개인 프로젝트 외에도 5월 월간 목표였던 MSA 공부도 조금이나마 성공했다.

  • serviceDiscovery
  • Spring Cloud Gateway

두 가지 개념과, 예시 등을 공부했다. 슬슬 개인 프로젝트를 msa 구조로 변경해볼까 고려 중이다.

독서

<한 권으로 읽는 컴퓨터 구조와 프로그래밍>을 계속 읽고 있다.

Try 🧚

  • msa 공부하기
  • 개인 프로젝트 진행하기
    - 백엔드
    - 테스트 코드 고도화(레스트 독스)
    - h2 DB에서 MySQL로 데이터베이스 전환
    - Video 도메인 테스트
    - 리프레시토큰 구현
  • 최소 1곳 이상 회사 지원하기
    - 이력서
    - 포트폴리오
  • 매일 골드 이상 난의도의 알고리즘 문제 풀이 진행하기
  • 책 읽기

독서 목록

서평 완료 목록

서평 예정 목록 (읽는 중)

  • 면접을 위한 CS 전공지식 노트
  • 한 권으로 읽는 컴퓨터 구조와 프로그래밍

독서 예정 목록

  • 오브젝트
  • HTTP 완벽 가이드
  • 자바/스프링 개발자를 위한 실용주의 프로그래밍
  • 모던 자바 인 액션
  • 자바 성능 튜닝 이야기
  • 헤드 퍼스트 서블릿
  • 파이브 라인스 오브 코드

Extras

Z

package main.BJ1074; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.StringTokenizer; 

public class Main { 

	public static void main(String[] args) { 
		new Main().run(); 
	} 
	
	private void run() { 
		Input ip = readInput(); 
		System.out.println(new Solution().solution(ip.n, ip.r, ip.c)); 
	} 
	
	private Input readInput() { 
		try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
			StringTokenizer st = new StringTokenizer(br.readLine()); 
				int n = Integer.parseInt(st.nextToken()); 
				int r = Integer.parseInt(st.nextToken()); 
				int c = Integer.parseInt(st.nextToken()); 
				return new Input(n, r, c); 
		} catch (IOException e) { 
			throw new RuntimeException(); 
		} 
	} 
	
	private static class Input { 
		final int n; 
		final int r; 
		final int c; 
	
		public Input(int n, int r, int c) { 
			this.n = n; 
			this.r = r; 
			this.c = c; 
		} 
	} 
} 
	
class Solution { 

	public int solution(int n, int r, int c) { 
		int N = (int) Math.pow(2, n); 
		return calc(N, r, c, 0); 
	} 

	private int calc(int n, int r, int c, int cnt) { 
		if (n == 1) { 
			return cnt; 
		} 
		int half = n / 2; 
		int area = half * half; 
		if (r < half && c < half) { // 좌상 (2사분면) 
			return calc(half, r, c, cnt); 
		} else if (r < half && c >= half) { // 우상 (1사분면) 
			return calc(half, r, c - half, cnt + area); 
		} else if (r >= half && c < half) { // 좌하 (3사분면) 
			return calc(half, r - half, c, cnt + 2 * area); 
		} else { // 우하 (4사분면) 
			return calc(half, r - half, c - half, cnt + 3 * area); 
		} 
	} 
}
profile
What doesn't kill you, makes you stronger

0개의 댓글