기본 콘텐츠로 건너뛰기

글

코딩 테스트 - 호텔 방 배정

package programmers ; import java.util.Arrays ; import java.util.HashMap ; public class 호텔 _ 방 _ 배정 _230219 { public static void main (String[] args) { long k = 10 ; long [] rn = { 1 , 3 , 4 , 1 , 3 , 1 } ; System. out .println(Arrays. toString ( solution (k , rn))) ; } /* 1. 한 번에 한 명씩 신청한 순서대로 방을 배정합니다 . 2. 고객은 투숙하기 원하는 방 번호를 제출합니다 . 3. 고객이 원하는 방이 비어 있다면 즉시 배정합니다 . 4. 고객이 원하는 방이 이미 배정되어 있으면 원하는 방보다 번호가 크면서 비어있는 방 중 가장 번호가 작은 방을 배정합니다 . */ static long [] solution ( long k , long [] room_number) { HashMap <Long , Long> map = new HashMap<>() ; long [] answer = new long [room_number. length ] ; for ( int i = 0 ; i < room_number. length ; i++){ answer[i] = 방찾기 (map , room_number[i]) ; } return answer ; } static Long 방찾기 (HashMap <Long , Long> map , long 방번호 ) { if (map.containsKey( 방번호 ) == false ) { // 방이 비어 있으면 다...

코딩 테스트 - k진수에서 소수 개수 구하기

package programmers ; import java.math.BigInteger ; public class k 진수에서소수개수구하기 _230218 { public static void main (String[] args) { int n = 437674 ; int k = 3 ; System. out .println( solution (n , k)) ; } public int 추천코드 ( int n , int k) { int ans = 0 ; String temp[] = Integer. toString (n , k).split( " 0 " ) ; Loop : for (String t : temp) { if (t.length() == 0 ) continue; long a = Long. parseLong (t) ; if (a == 1 ) continue; for ( int i= 2 ; i<=Math. sqrt (a) ; i++) if (a%i == 0 ) continue Loop ; ans++ ; } return ans ; } public static boolean 소수찾기 ( long l) { if (l == 1 ){ return false; } //1 이면 없어지니 for ( int i = 2 ; i <=( int )Math. sqrt (l) ; i++) { if (l%i== 0 ){ return false; } } return true; } public ...

코딩 테스트 - 보석 쇼핑

package programmers ; import java.util.HashMap ; import java.util.HashSet ; public class 보석쇼핑 _230217 { public static void main (String[] args) { // 푸는중 String [] 보석쓰 = { "DIA" , "RUBY" , "RUBY" , "DIA" , "DIA" , "EMERALD" , "SAPPHIRE" , "DIA" } ; System. out .println( solution ( 보석쓰 )) ; } public static int [] solution (String[] gems) { // 보석을 여기서부터 여기까지 주세요 할 것임 // 보석 종류 다 찾아서 // 다 있으면 out int [] answer = new int [ 2 ] ; int len = gems. length ; HashSet<String> set = new HashSet<>() ; for (String str : gems) { //d set.add(str) ; } int 범위 = Integer. MAX_VALUE ; int 왼쪽 = 0 ; int 오른쪽 = 0 ; int start = 0 ; int end = 0 ; HashMap<String , Integer> map = new HashMap<>() ; while ( true ) { if (set.si...

코딩 테스트 - 숫자 게임

package programmers ; import java.util.Arrays ; public class 숫자게임 _230216 { public static void main (String[] args) { } class Solution { public int solution ( int [] A , int [] B) { Arrays. sort (A) ; Arrays. sort (B) ; // 어차피 큰 순서대로 sort 하는 것이 ... int 에이 = 0 ; int 비 = 0 ; int answer = 0 ; for ( int i = 0 ; i < A. length ; i++) { if (A[ 에이 ] > B[ 비 ]) { 비 ++ ; } else if (A[ 에이 ] == B[ 비 ]) { 비 ++ ; } else { 에이 ++ ; 비 ++ ; answer++ ; } } return answer ; } } }

코딩 테스트 - 불량 사용자

package programmers ; import java.util.HashSet ; import java.util.LinkedHashSet ; import java.util.Set ; public class 불량사용자 _230215 { public static void main (String[] args) { String[] user_id = { "frodo" , "fradi" , "crodo" , "abc123" , "frodoc" } ; String[] banned_id = { "fr*d*" , "abc1**" } ; System. out .println( solution (user_id , banned_id)) ; } // 남이 짠 게 좋아 보이는 코드 Set<Integer> set2 ; public int solution2 (String[] user_id , String[] banned_id) { set2 = new HashSet<>() ; go( 0 , user_id , banned_id , 0 ) ; return set2 .size() ; } public void go ( int index , String[] user_id , String[] banned_id , int bit) { if (index == banned_id. length ) { set2 .add(bit) ; return; } String reg = banned_id[index].replace( "*" , "[ \\ w \\ d]" ) ; for ( int i= 0 ; ...

코딩 테스트 - 단어 변환

package programmers ; public class 단어변환 _230214 { public int solution (String begin , String target , String[] words) { int len = words. length ; int idx = - 1 ; //target 이 words 내에 있는지 확인해야 함 ( 없으면 아예 못 바꿈 - 2 번째 예 ) for ( int i = 0 ; i < len ; i++) { if (words[i].equals(target)){ idx = i ; } } if (idx < 0 ) { return 0 ; } //dfs boolean [] arr = new boolean [len] ; return dfs(begin , target , - 1 , words , arr , 0 ) ; } public int dfs (String begin , String target , int idx , String[] words , boolean [] arr , int cnt) { if (target.equals(begin)) { //target 이 된 순간 떠난다 return cnt ; } if (idx >= 0 ) { // 방문한 노드는 true 로 바꿔줌 arr[idx] = true; } cnt...

개발 공부 - Photoshop 으로 PDF 파일 내의 이미지 추출해서 저장하기

 일단 그냥 프로필 만들려다가 닌텐도에서 제공하는 pdf로 뽀야미 고화질 사진을 사용하고자 시작되었다. (뽀야미는 매우 귀엽다) 포토샵 라이선스가 없어서, 학교에 문의하니 그냥 학교 계정으로 아이디 생성만 하면 된다고 하여  클라우드 PC 환경에서 진행하였다.  (vSphere 위의 Horizon  환경) 1) 포토샵을 켠다. 2) 이미지를 추출하고자 하는 PDF 파일을 연다. 3) 원하는 이미지를 추출한다. * 이미지는 shift 를 누르고 여러개를 선택하거나, control이나 OPtion등을 누르고 한 개씩 사용 가능하다. 나는 맥 환경에서 Horizon을 띄운 상태라 단축키가 조금 다르다. 4) 이미지를 원하는 형태로 저장한다. 5) 원하는 방식으로 로 사용한다. 이렇게 간단하게 사용 가능하다. JPG 파일로 일괄 저장도 가능한데,  이런식 - https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=choda100&logNo=220531489235 - 으로 액션을 사용하거나, 이런 식 -  https://wotdud608.tistory.com/42 - 으로 이미지 프로세서를 사용하면 된다. 이것은 adobe reader 를 사용해서 어떻게든 하려다가 결국 포토샵 PC를 찾은 나의 투쟁인 것... 아무튼 우리 뽀야미는 이렇게 생겼다. 귀엽다.

코딩 테스트 - 등굣길

package programmers ; public class 등굣길 _230213 { public static void main (String[] args) { int m = 4 ; int n = 3 ; int [][] puddles = {{ 2 , 2 }} ; System. out .println( solution ( 4 , 3 , puddles)) ; } public static int solution ( int m , int n , int [][] puddles) { //m x n 크기의 길 // 집 : 0/0 위치인데 1x1 이라고 부름 // 학교 : mxn 위치임 int 최단경로의수를나누라고함 = 1000000007 ; int [][] array = new int [n + 1 ][m + 1 ] ; // 한 칸 씩 +1 하고 0 -1 -1 0 이런 식으로 보이게 함 for ( int i = 0 ; i < puddles. length ; i++) { array[puddles[i][ 1 ]][puddles[i][ 0 ]] = - 1 ; //check } array[ 1 ][ 1 ] = 1 ; // 이것은 집의 위치 for ( int i = 1 ; i < n + 1 ; i++) { for ( int j = 1 ; j < m + 1 ; j++) { if (array[i][j] == - 1 ){ continue; } if (array[i - 1 ][j] > 0 ){ array[i][j] += array...

코딩 테스트 - SocksLaundering

import java.util.Arrays ; public class SocksLaundering_230212 { public static void main(String[] args) { int K = 2 ; int [] C = { 1 , 2 , 1 , 1 } ; int [] D = { 1 , 4 , 3 , 2 , 4 } ; System.out.println(solution(K , C , D)) ; } public static int solution( int K , int [] C , int [] D) { int answer = 0 ; //K = 세탁기가 청소할수 있는 양말수의 MAX //C = 깨끗한 양말 수 //D = 더러운 양말 수 int 최대요소수 = 51 ; int [] 깨끗한것 = new int [ 최대요소수 ] ; int [] 더러운것 = new int [ 최대요소수 ] ; for ( int i : C) { //sort 하지 않고 있는 것 대로 저장 깨끗한것 [i] += 1 ; } for ( int i : D) { //sort 하지 않고 있는 것 대로 저장 더러운것 [i] += 1 ; } for ( int i = 1 ; i < 최대요소수 ; i++) { answer += 깨끗한것 [i]/ 2 ; if ( 깨끗한것 [i]% 2 != 0 && K > 0 && 더러운것 [i] > 0 ) { // 깨끗한 양말 쌍 + 더러운 양말 쌍 answer += 1 ; ...

코딩 테스트 - 단속 카메라

package programmers ; import java.util.Arrays ; public class 단속카메라 _230211 { public static void main (String[] args) { int [][] 경로 = {{- 20 , - 15 } , {- 14 , - 5 } , {- 18 , - 13 } , {- 5 , - 3 }} ; System. out .println( solution ( 경로 )) ; } public static int solution ( int [][] routes) { Arrays. sort (routes , (o1 , o2) -> Integer. compare (o1[ 1 ] , o2[ 1 ])) ; int answer = 0 ; int last_camera = Integer. MIN_VALUE ; for ( int [] a : routes) { if (last_camera < a[ 0 ]) { answer++ ; last_camera = a[ 1 ] ; } /// 카메라 위치를 처음 조정 하고 나서 // route 의 시작 위치보다 작을 경우에는 // 새로운 카메라를 나갈 때 설치하며 ++ 한다 } return answer ; } } 이거 o1 o1 써놓고 ?????????? 하고 있었음 재밌는 새벽 디버깅...

코딩 테스트 - 주식 가격

package programmers ; import java.util.Arrays ; public class 주식가격 _230210 { public static void main (String[] args) { int [] prices = { 1 , 2 , 3 , 2 , 3 } ; System. out .println(Arrays. toString ( solution (prices))) ; } public static int [] solution ( int [] prices) { // 이거 스택 문제인데 다들 이렇게 푸는 재미있는 문제 ... int length = prices. length ; int [] answer = new int [length] ; // 초 단위로 기록된 주식가격이 담긴 배열 prices 가 매개변수로 주어질 때 , // 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요 . //[4, 3, 1, 1, 0] for ( int i = 0 ; i < length ; i++) { for ( int j = i + 1 ; j < length ; j++) { // 마지막 경우에는 그냥 0 임 - 5 초 시점의 ₩ 3 은 0 초간 가격이 떨어지지 않았습니다 . answer[i]++ ; if (prices[i] > prices[j]){ break; } } } return answer ; } }

코딩 테스트 - 네트워크

package programmers; public class 네트워크_230208 { /* 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 컴퓨터의 개수 n은 1 이상 200 이하인 자연수입니다. 각 컴퓨터는 0부터 n-1인 정수로 표현합니다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현합니다. computer[i][i]는 항상 1입니다. 입출력 예 n computers return 3 [[1, 1, 0], [1, 1, 0], [0, 0, 1]] 2 */ public static void main ( String [] args ) { int n = 3 ; int [][] computers = {{ 1 , 1 , 0 }, { 1 , 1 , 0 }, { 0 , 0 , 1 }}; System.out. println ( solution (n, computers)); } public int solution ( int n , int [][] computers ) { int answer = 0 ; boolean [] visit = new boolean [n]; ...

용어 사전 - 러버덕 디버깅 (rubber duck debugging)

 고무 오리 디버깅이라는 개념을 재밌게 들어서 정리해 놓으려 한다. 소프트웨어 공학에서 나오는 개념이라고 하는데, 고무 오리를 들고 다니면서  코드를 한 줄씩 오리에게 설명하도록 하는 방식이다. (딱히 오리가 아니어도 된다.) 다른 프로그래머에게 설명해보기 전에, 다른 사람을 방해하지 않고 고무 오리에게 설명함으로써 문제를 다른 관점에서 평가할 수 있도록 도와주는 디버깅 방식이다. 오류가 발생하고, 그 오류가 잘 해결되지 않을 때 책상 위의 오리에게 발생한 문제를 설명하면서 다시 문제를 해결해보는 디버깅 방식이다. (의외로 이러다가 해결이 잘 될 수도 있다.) 처음부터 문제를 다시 정의함으로써 문제 해결책을 정하는 것이다! 이 것은 나-1과 나-2에게 설명하는 방식이랑 비슷한 것 같으나 나-1과 나-2는 다양한 생각을 함으로 인하여 진전이 없었는데, 무생물에게 설명함으로써 깨달음을 얻을 수 있을지도 모른다는 생각을 하여 적용해 보기로 하였다. (나를 1/2로 잘라서 개발한 나 와 까칠하게 남의 코드를  보는 나로 분리하여 개발하는 나의 방식... (보통 중간 지점에서 타협 하는 것이 흠)) 이러한 빌드업 후 구매 사유를 기재해 보려 했으나 사실 기승전결 없이 어쨌든 오리를 샀다는 이야기... 고무 오리 비슷한 것 출처 : https://ko.wikipedia.org/wiki/%EA%B3%A0%EB%AC%B4_%EC%98%A4%EB%A6%AC_%EB%94%94%EB%B2%84%EA%B9%85 : https://onwah.tistory.com/9

코딩 테스트 - 기지국 찾기

package programmers; import java.util.Arrays; public class 기지국설치_230208 { public static void main ( String [] args ) { int n = 11 ; int [] stations = { 4 , 11 }; int W = 1 ; System.out. println ( solution (n, stations, W)) } public static int solution ( int n , int [] stations , int w ) { int answer = 0 ; //n = 아파트의 개수 //stations = 아파트 번호 담긴 배열 //W = 전파의 도달 범위 //기지국 설치 개수 세기 int 시작점 = 1 ; for ( int i = 0 ; i < stations.length; i ++ ){ if (시작점 < stations[i] - w){ answer += 기지국찾기(시작점, stations[i] - w - 1 , w); } 시작점 = stations[i] + w + 1 ; } if (stations[stations.length - 1 ] + w < n){ answer = answer + 기지국찾기(stations[stations.length - 1 ] + w + 1 , n, w); } return answer; } public static int 기지국찾기 ( int 시작점 , int 끝점 , int w...

개발 공부 - Macbook Pro M2 의 가상머신(utm)에 devStack 을 이용하여 OpenStack 설치하기 (수정중)

가상머신 1. vmware fusion : 우분투 설치 후 devStack을 실행까지는 했는데 dashboard 가 안 떠서 수정하다가 이틀만에 포기 포기 사유 : 다른 자료가 존재해서 저걸 보고 하는 게 이걸 고치는 것보다 빠를 듯 2. virtualbox : 우분투 설치 중에 4번 뻗어서 버림 3. utm : 회사 컨플루언스에 자료가 있기에 (입사 동기가 만들고 계셔서 뭔가 라이브 코딩 느낌으로 볼 수 있음...) 이걸로 해보려고 한다. * deepAL 자꾸 blogger 에서 ui적인 오류가 나서 상시 실행 종료해버림 아무튼 utm으로 설치해서 인스턴트 에러 나는 화면까지 띄웠는데, 여기까지 정리 목적으로 올림 기존에 받아둔 arm용 ubuntu iso를 사용합니다.  https://www.bubblecat.co.kr/2023/02/macbook-pro-m2-vmware-fusion.html 여기 url들을 참고... utm에서는 virtualize(토끼)로 설치를 했고, 리눅스 선택 후 use app virtualization   을 꼭 체크 해지 하고 진행합니다. 그리고는 기본 세팅으로 진행하나, 메모리는 사실 8기가 주고 4코어를 설정했습니다. (앞서 설치하신 분이 6기가 이상 설정해야 한다고 하셨음) 저장공간은 32기가를 잡으셨길래 저도 따라서 32기가를 잡았습니다. 플레이 하기 전 네트워크도 알아서 추가하고 (기존 설정의 난이도로 인한 알아서 세팅자가 되어버림) -     nat     하나는 그냥 두고, 하나는 host-only로 써서 얘를 설정하면 됩니다. 아무튼 iso도 세팅하고 sudo apt update sudo apt install net-tools 한 뒤, ifconfig -a       해서 아이피를 확인하고, 고정 ip 설정 목적으로 root 계정 권한을 줍니다. (sudo -i 하면 됨) 그다음에 cd /etc/ne...

개발 공부 - Macbook Pro M2 의 VMware Fusion 에 우분투 설치하기

 오픈스택이 또 우분투가 필요하다는걸 알고 난 뒤 열심히 우분투를 깔았다. (사실 윈도우 깔기 - https://www.bubblecat.co.kr/2023/02/macbook-pro-m2-vmware-fusion-windows-10.html 보다 훨씬 찾기 쉬웠던 것...) 참고한 유튜브는  이것이다. 윈도우보다 훨씬 수월하게 깔린 것이다. iso 파일은 여기서 받았다. (우분투 공식 다운로드 사이트 - 추후 막힐 수도 있다고 생각이 들긴 합니다.) 이름이 ubuntu 어쩌구가 아니라 focal이라 의심하며 진행한 무식한 나... focal은 우분투 코드네임이었다고 한다... (2025년까지 지원하는 장기 지원 버전) devstack을 설치해 보려고 했는데 뭐 업그레이드 한다길래 하라고 했다. 이렇게 좌충우돌 설치를 하지만 어떻게 될 거 같다... 아무튼 vmware fusion 설치하면서 썼던 url은 아래와 같다. https://kb.vmware.com/s/article/2014097#-4 https://customerconnect.vmware.com/downloads/info/slug/desktop_end_user_computing/vmware_fusion/13_0 검색하면서 필요한 데이터 얻었던 url은 아래와 같다. https://www.clien.net/service/board/cm_mac/16531046 윈도우 arm 설치파일 url은 아래와 같다. https://drive.google.com/u/1/uc?id=1j7TrlQQ4aqgpjKxWpbs58iJIxIJgD67v&export=download 우분투는 이것이다. https://cdimage.ubuntu.com/focal/daily-live/current/focal-desktop-arm64.iso 아무튼 이것이 다 오픈스택을 깔아보려는 나의 노오력이므로 이제 또 devstack을 이용한 오픈스택을 설치하고 정리해서 리뷰하려고 한다.

코딩 테스트 - 124 나라의 숫자

package programmers ; public class _124 나라의숫자 _230207 { public static void main (String[] args) { // 모든 수를 1, 2, 4 로만 표현함 int n = 7 ; System. out .println( solution (n)) ; } public static String solution ( int n) { /* 1 = 1 2 = 2 3 = 4 4 = 11 5 = 12 6 = 14 7 = 21 8 = 22 9 = 24 10 = 41 그러면 이런 식으로 11 = 42 12 = 44 13 = 111 14 = 112 15 = 114 */ int temp = 0 ; StringBuilder sb = new StringBuilder() ; while (n > 0 ) { temp = n % 3 ; // 숫자 개수로 나눔 n = n / 3 ; if (temp== 0 ) { //3 을 4 로 바꿔줘버림 temp = 4 ; n -= 1 ; // 또 돌리기 } sb.insert( 0 , temp) ; } return sb.toString() ; } }

개발 공부 - Macbook Pro M2 에 VMware Fusion Windows 10 설치하기

 일단 윈도우가 없으니까 불편해서 깔아보기로 했다. (후기부터 말하자면 깔아도 별로 안 편한 상태) 참고한 유튜브 :  https://www.youtube.com/watch?v=Pt5FIO_I-qo 일단  1) VMware Fusion 설치파일을 구한다. 2) Windows 10이나 11 iso를 구한다. 3) 설치해본다. 였는데 2)에서 문제가 있었다! 이유는 M2는 ARM64용으로 iso를 구해다 깔아야 하기 때문이었다. 인터넷에서 찾은 링크 : https://drive.google.com/u/1/uc?id=1j7TrlQQ4aqgpjKxWpbs58iJIxIJgD67v&export=download 이걸 받으면 또 VHDX 여서 바로 인식이 안 되는데,  그러면 또 1) homebrew를 설치한다 2) qemu를 깐다. 3) 퓨전이 읽을 수 있는 형태로 변환한다. 는 과정을 거친다. 홈브루 설치 시에는 https://brew.sh/index_ko 에 들어가서 에 있는 터미널 명령어를 붙여넣고 나서 설치 후에 뭐... 환경 변수 잡으라면 잡으면 된다. (홈브루가 알아서 명령어도 알려줌) 그리고 나서는 brew install qemu 를 하면 된다. 설치 후에는 qemu-img convert -O vmdk /Users/사용자명/Downloads/Windows10_InsiderPreview_Client_ARM64_en-us_21354.VHDX ~/Desktop/Install/Windows10ARM.vmdk 하면 되는데 이건 사실 qemu-img convert -O vmdk 를 쓰고 나서, 아까 받아놓은 VHDX를 설치한 뒤,  생성할   vmdk의 경로를 잡아주면 된다.  이거는 사실 Install이라는 디렉토리도 생성해 줄 줄 알았는데 명석하지 않은 것... (그냥 바탕화면에 생성하면 된다.) 그리고 나서는 별 거 없지 않고! 설치시에 fn+shift+f10을 눌러서 커맨드창을 ...