Notice
Recent Posts
Recent Comments
Link
«   2026/09   »
일 월 화 수 목 금 토
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

seaking110 님의 블로그

241226 TIL 본문

Today I Learned

241226 TIL

seaking110 2024. 12. 26. 20:14

 

프로그래머스 3진법 뒤집기

https://school.programmers.co.kr/learn/courses/30/lessons/68935

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

10 진법을 n진법으로 바꾸는 방식은 원래

String a = "";
//b가 진법
while(n>0){
	a = (n%b) + a;
    n = n / 3;
}

 

이런식으로 나누면서 만드는 방식으로 알고 있었는데

// 10진법을 3진법으로 변경
String s = Integer.toString(n, 3);

// 3진법을 10진법으로 변경
int a = Integer.parseInt(s,3);

이런 방식으로 아주아주 간단하게 변경가능하다! 기억해두자!

 

 

  • 백준 11054번 가장 긴 바이토닉 부분 수열
    • 입력 : 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000)  
    • 출력 : 가장 긴 바이토닉 수열의 길이 출력
    • 수열 S가 어떤 수 Sk를 기준으로 S1 < S2 < ... Sk-1 < Sk > Sk+1 > ... SN-1 > SN을 만족한다면, 그 수열을 바이토닉 수열이라 한다.
    • dp를 두 종류로 나눠 증가하는 값의 수량을 찾는 dp와 감소하는 값의 수량을 찾는 dp로 구분
    • 한 지점에서 이전부터 증가해온 값과 앞으로 감소할 수 있는 값의 합이 최대한 부분을 찾고 두 값을 더한 값에 -1 하여 출력
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        StringTokenizer st = new StringTokenizer(bf.readLine());
        int arr[] = new int[n];
        int mindp[] = new int[n];
        int maxdp[] = new int[n];
        for(int i=0;i<n;i++) {
        	arr[i] = Integer.parseInt(st.nextToken());
        	mindp[i] = 1;
        	maxdp[i] = 1;
        }
        
        for(int i=1;i<n;i++) {
        	for(int j=0;j<i;j++) {
        		if(arr[j] < arr[i])
        		maxdp[i] = Math.max(maxdp[i], maxdp[j]+1);
        	}
        }
        mindp[n-1] = 1;
        for(int i=n-2;i>=0;i--) {
        	for(int j=n-1;j>i;j--) {
        		if(arr[j] < arr[i])
        		mindp[i] = Math.max(mindp[i], mindp[j]+1);
        	}
        }
        int max = 0;
        for(int i=0;i<n;i++) {
        	if(max < maxdp[i]+mindp[i]) {
        		max = maxdp[i] + mindp[i];
        	}
        }
        System.out.println(max-1);
    }
}

 

 

  • 백준 2565번 전깃줄
    • 입력 : 두 전봇대 사이의 전깃줄 개수와 연결되는 위치의 번호가 차례로 주어진다.
    • 출력 : 모든 전깃줄이 서로 교차하지 않게 하기 위해 없애야 하는 전깃줄의 최소 개수를 출력
    • LIS 문제다! 가장 길게 증가하는 수열 문제로 생각하자
    • Comparator을 이용해서 배열을 정렬하고 하나씩 줄을 추가해서 선에 겹치는지 확인하자
    • 제일 핵심 코드는 아래로 B 전봇대의 값이 안겹치면 겹치지 않는 선으로 dp 값에 1을 더해주자
for(int j=0;j<i;j++) {
        		if(arr[i][1] > arr[j][1]) {
        			dp[i] = Math.max(dp[i], dp[j]+1);
        		}
        	}

 

전체 코드

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        int arr[][] = new int[n][2];
        int dp[] = new int[n];
        for(int i=0;i<n;i++) {
        	StringTokenizer st = new StringTokenizer(bf.readLine());
        	arr[i][0] = Integer.parseInt(st.nextToken());
        	arr[i][1] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr , new Comparator<int[]>() {
			@Override
			public int compare(int[] l1, int[] l2) {
				// TODO Auto-generated method stub
				return l1[0] - l2[0];
			}
        	
        });
        int max = 0;
        for(int i=0;i<n;i++) {
        	dp[i]=1;
        	for(int j=0;j<i;j++) {
        		if(arr[i][1] > arr[j][1]) {
        			dp[i] = Math.max(dp[i], dp[j]+1);
        		}
        	}
        	max = Math.max(dp[i], max);
        }
       System.out.println(n - max);
    }
}

 

  • 백준 9251번 LCS
    • 입력 : 두 문자열 최대 1000글자, 알파벳 대문자로만 구성
    • 출력 : 두 문자열의 LCS 길이를 출력
    • 부분 수열 중 가장 긴 것을 찾는 문제로 1시간 실패하고 검색해서 알게 되었다.
    • 부분 수열에서 순서가 지켜지기 때문에 각 문자열의 문자를 비교하며 서로 같으면 1씩 증가시키기
    • 표를 한번 그려보면 쉽게 점화식을 찾을 수 있다 나중에 한번 그려보자
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s1 = bf.readLine();
        String s2 = bf.readLine();
        int dp[][] = new int[s1.length()+1][s2.length()+1];
        for(int i=1;i<s1.length()+1;i++) {
        	for(int j=1;j<s2.length()+1;j++) {
        		if(s1.charAt(i-1)==s2.charAt(j-1)) {
        			dp[i][j] = dp[i-1][j-1]+1;
        		}
        		else {
        			dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
        		}
        	}
        }
        System.out.println(dp[s1.length()][s2.length()]);
    }
}

 

 

  • 백준 1912번 연속합
    • 입력 : 첫째 줄에 정수 n (1~100,000) 둘째 줄에 n개의 정수로 이루어진 수열 수는 -1000~1000
    •  출력 : 연속된 몇 개의 수를 선택해 구할 수 있는 가장 큰 합
    • 반복문으로 dp[i]의 값을 dp[i-1] + arr[i] 와 arr[i] 값을 비교해서 큰 값을 넣는 식으로 반복
    • 전체 dp 값 중 가장 큰 값이 연속 합의 가장 큰 값! 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        StringTokenizer st = new StringTokenizer(bf.readLine());
        int arr[] = new int[n];
        int dp[] = new int[n];
        for(int i=0;i<n;i++) {
        	arr[i] = Integer.parseInt(st.nextToken());
        	dp[i] = arr[i];
        }
        int max = dp[0];
        for(int i=1;i<n;i++) {
        	dp[i] = Math.max(arr[i], dp[i-1]+arr[i]);
        	max = Math.max(max, dp[i]);
        }
        System.out.println(max);
    }
}

 

 

팀 프로젝트 : 자기 소개 페이지 제작 중 배운 점!

 

  • 카드 로직 제작 중 다른 html 파일로 id 값을 전달해야하는 경우 URL 쿼리 스트링에 id 값을 추가하여 넘기는 방식을 사용한다.
  • id를 URL로 전달
window.location.href = "./~~html?id="+id;

 

  • 해당 html에서 쿼리 스트링으로 전달된 id 값 읽기
const urlParams = new URLSearchParams(window.location.search);
const id = urlParams.get("id"); // 전달된 id 값 가져오기

 

  • 이렇게 쉽게 id 값을 넘겨 받을 수 있다!
  • 주의할 점은 비밀번호 같은 값은 전달해선 안된다! 
  • LocalStorage를 이용하여 ID 값을 넘겨줄 수도 있다고 하는데 다음에 시도해보자!

 

  • 아이콘에 링크를 달아보자!
  • 기존의 <i></i> 태그는 기울임꼴(Italic) 의 역할
  • 요즘의 역할은 아이콘 라이브러리에서 아이콘을 나타내는 역할로 사용!
  • Font Awesome 아이콘 라이브러리 사용
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">

<i class="fas fa-home"></i> <!-- 집 아이콘 -->
<i class="fab fa-github"></i> <!-- GitHub 아이콘 -->
<i class="fas fa-link"></i> <!-- 링크 아이콘 -->

'Today I Learned' 카테고리의 다른 글

온보딩 프로젝트를 마치며  (0) 2024.12.30
241227 TIL (DFS를 이용한 중복 순열, 순열, 조합구하기)  (1) 2024.12.27
241224 TIL  (0) 2024.12.24
241223 TIL  (0) 2024.12.23
17일차 사전캠프  (1) 2024.12.20