본문 바로가기

전체 글

(165)
[프로그래머스] (Lv.1) 크레인 인형뽑기 게임 문제 게임개발자인 "죠르디"는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. "죠르디"는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 "1 x 1" 크기의 칸들로 이루어진 "N x N" 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 "5 x 5" 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 "1 x 1" 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때..
[Java] 배열 깊은 복사, 얕은 복사 ( feat. 원소가 객체라면? ) 문제점 ) 객체를 요소로 가진 A 배열이 있다. 새로운 B 배열을 만들고 A 배열의 요소들을 복사해서 저장하고 싶다. A 배열의 객체 요소를 변경해도 B 배열 내부의 요소들은 영향을 받지 않아야 한다. 어떻게 해야 할까? 해결책 ) 깊은 복사를 배열 자체만 하면 안 된다. 배열 내부에 저장된 요소 하나하나 깊은 복사 해서 저장해야 한다. 배열을 복사하는 방법은 크게 2 가지다. 얕은 복사 (Shallow Copy) 얕은 복사는 해당 배열의 '주소값'을 복사하는 것이다. 따라서 원본 배열의 주소값을 복사했기 때문에 원본 배열의 요소를 변경하면 복사된 배열도 동일하게 수정된다. int[] original = {1, 2, 3, 4, 5}; int[] copyArray = original; // 얕은 복사 or..
[2주 차 회고] 우테코 프리코스 5기 (feat. 우아한테크코스) - 총 4주 과정 (22.10.26 ~ 22.11.22) - 100% 온라인 진행 - 수강료 무료 2주 차 학습일지 (22.11.03 ~ 11.09) - 문제 1 (숫자 야구 게임) GitHub - meena2003/java-baseball: 숫자 야구 게임 미션을 진행하는 저장소 숫자 야구 게임 미션을 진행하는 저장소. Contribute to meena2003/java-baseball development by creating an account on GitHub. github.com 이번 주 미션은 '숫자 야구 게임'을 만드는 것이다! 사실 숫자 야구 게임을 한 번 만들어본 기억이 있어 내심 안심이 됐다. 하지만 시작부터 난관이었다. 왜냐하면 숫자 야구 게임을 구현하는 것보다 코드를 작성하는 순서와..
[1주 차 회고] 우테코 프리코스 5기 (feat. 우아한테크코스) - 총 4주 과정 (22.10.26 ~ 22.11.22) - 100% 온라인 진행 - 수강료 무료 우테코 프리코스를 신청한 이유 과거 내 질문에 대한 현업 개발자 지인의 대답이 아직도 귓가에 생생하다. "좋은 프로그래밍 부트캠프를 소개해달라고? 혹시 우아한테크코스라고 알아?" 이미 신청 기간이 지나버린 아쉬움을 달래고자 스스로에게 "여긴 아무나 들어갈 수 없어. 지금 신청해도 안될 거야"라고 위로했다. 조금 더 알아보니 실제로 엄청난 경쟁률에 내가 덤빌 수 있는 수준이 아니라는 것이 확실했다. 당시엔 기본적인 프로그래밍 문법도 모르던 완전 초보였고, 단 하나의 알고리즘 문제도 풀어보지 않았던 시기였다. 그렇게 시간이 흘렀다. 혼자서 책으로, 동영상을 Java 문법을 익히고 자료구조에 대해 접하며, SQL..
[MySQL] 데이터베이스, 테이블, 열 정보를 찾는 쿼리문 MySQL에서 쿼리문을 작성할 때 내가 찾고자는 데이터베이스명, 테이블명, 열 이름이 기억나지 않을때가 있다. 그럴때마다 Workbench의 [navigator]를 통해 확인할 수 있지만, CLU 상황에선 여의치가 않다. 그래서 쿼리문으로 해당 정보를 찾는 방법을 알면 유용할 것이다. 가장 먼저 어떤 ' 데이터베이스 '가 있는지 확인하는 명령어다. [ SHOW DATABASES ; ] SHOW DATABASES; 어떤 ' 테이블 '이 있는지 확인하는 명령어는 다음과 같다. [ SHOW TABLE STATUS ; ] 단순히 테이블의 이름만 확인하고 싶으면 더 짧게 가능하다. [ SHOW TABLES ; ] SHOW TABLE STATUS; // 자세한 테이블 정보 SHOW TABLES; // 테이블명만 간..
[MySQL] '조인 연산자'와 '집합 연산자'의 차이 조인 연산자는 " 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법 " 이다. 쉽게 말해서 아예 두 테이블을 '가로로' 연결한 뒤에 연산을 처리한다. 그래서 '열'이 늘어난다. 대표적인 종류는 다음과 같다. - (INNER) JOIN : 두 테이블 모두에 공통된 행만 가져옴. - LEFT (OUTER) JOIN : 왼쪽 테이블 행은 모두 가져오고, 오른쪽은 공통된 것만 가져옴. 나머지는 null값. - RIGTH (OUTER) JOIN : 오른쪽 테이블 행은 모두 가져오고, 왼쪽은 공통된 것만 가져옴. 나머지는 null값. - FULL (OUTER) JOIN : 각 테이블의 모든 행을 가져옴. 일치하지 않는 내용은 null값. 집합 연산자는 " 2개 이상의 질의 결과를 하나의 결과로 만들어 주는 방..
[MySQL] 두 날짜의 차이를 구하라 (feat. DATEDIFF, TIMESTAMPDIFF) 시점 A 와 시점 B 간격의 차이를 구하는 방법은 무엇이 있을까? ' 시점 A - 시점 B ' 를 하지 않아도 날짜 사이의 차이를 구하는 함수가 있다. 바로 DATEDIFF 함수와 TIMESTAMPDIFF 함수다. DATEDIFF 함수는 순전히 ' 일 ' 차이만 계산한다. 쉽게 이야기해서 ' 날짜 A - 날짜 B ' 를 해준다. DATEDIFF('날짜1', '날짜2') -- 날짜1 에서 날짜2 를 뺀다. 반면 TIMESTAMPDIFF 함수는 ' 연(YEAR) ', ' 분기(QUARTER) ', ' 월(MONTH) ', ' 주(WEEK) ', ' 일(DAY) ' 시(HOUR) ', ' 분(MINUTE) ', ' 초(SECOND) ' 단위로 차이를 구할 수 있다. TIMESTAMPDIFF 함수에 원하는 단위..
[MySQL] 날짜와 시간 포멧 정하기 (feat. DATE_FORMAT) 주어진 날짜 및 시간을 원하는 형식으로 바꿀 수 있는 함수가 ' DATE_FORMAT ' 이다. DATE_FORMAT ( 시간 값 , '원하는 포멧' ) 형식으로 지정한다. 원하는 포멧은 대소문자를 가리기 때문에 주의해야 한다. %Y 4자리 년도 2022, 1990 %y 2자리 년도 22, 90 %c 숫자 월 (한자리) 1, 2, 3, ... 12 %M 긴 월 (영문) September %b 짧은 월 (영문) Jan, Feb, Mar %d 일자 (두자리) 01, 15, 30 %e 일자 (한자리) 1, 15, 30 %I 시간 (12시간) 01, 05, 11, 12 %H 시간 (24시간) 01, 05, 17, 21, 24 %i 분 00, 05, 30, 54 %s 초 00, 10, 34 SELECT NAME,..
[MySQL] 여러가지 NULL 처리 방법 (feat. IF , IFNULL , COALESCE , CASE) 데이터 값이 NULL 인 경우 다르게 처리해야 할 때가 있다. 이때 4가지 방법으로 NULL 을 다르게 처리할 수 있다. 1. IF 로 처리하기 IF ( 조건문 , '참일 경우', '거짓일 경우' ) IF 문으로 해당 컬럼의 값이 NULL 일 경우 처리할 수 있다. SELECT IF(NAME IS NULL, 'No name', NAME) FROM 테이블명; 2. IFNULL 로 처리하기 IFNULL ( 컬럼 명, 'NULL 일 경우 대체 값' ) IFNULL 문으로 해당 컬럼의 값이 NULL 일 경우 원하는 값으로 대체할 수 있다. SELECT IFNULL(NAME, 'No name') FROM 테이블명; 3. COALESCE 로 처리하기 COALESCE ( 첫 번째 표현식, 두 번째 표현식, 세 번째 ..
[MySQL] 특정 문자열 검색하기 (feat. LIKE 함수) 문자열에 특정 문자가 포함되어 있는지 확인할 필요가 있을 때가 있다. LIKE 함수를 사용하면 된다. ' % ' 는 0개 이상의 문자를 의미한다. 만약 LIKE ' %학교 ' 가 있다면 학교 앞에 어떤 단어가 있어도 상관없이 포함된다. 심지어 아무런 단어가 없어도 된다. 즉 마지막에 '학교' 끝나는 단어라면 해당된다. LIKE ' 전문% ' 이라면 앞에 '전문'으로 시작하는 단어를 나타낸다. LIKE ' %사람% ' 은 '사람'이란 단어를 포함한 단어를 선택한다. LIKE 키워드를 두 번 이상 쓰려면 AND 또는 OR 을 통해 이어주면 된다. select * from 테이블명 where title like '%아디다스%' AND '%나이키%';
[프로그래머스] (Lv.2) N개의 최소공배수 ** 문제 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. - 출력 예시 - 정답 코드 class Solution { public int solution(int[] arr) { int max = Math.max(arr[0], arr[1]); int min = Math.min(arr[0], arr[1]); int GCD = gcd(max, min); int..
[프로그래머스] (Lv.2) 멀리 뛰기 문제 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다. 제한 사항 n은 1 이상, 2000 이하인 정수입니다. - 출력 예시 - 정답 코드 class Solution { public long solution(int n) { ..
[Java] Map 인터페이스에서 값(value)을 기준으로 정렬하기 Map 인터페이스는 '키(key)' 와 '값(value)' 로 이뤄져있다. 키는 중복이 허용되지 않고, Map 인터페이스의 기준이 된다. 따라서 키가 정렬 기준이다. 만약 TreeMap 을 만들어 다음과 같이 코드를 넣으면 key 기준에 따라 정렬되어 저장된다. Map map = new TreeMap(); map.put("b", 100); map.put("a", 90); map.put("c", 80); map.put("d", 70); map.put("e", 60); Set set = map.entrySet(); System.out.println(set); // [a=90, b=100, c=80, d=70, e=60] 하지만 값(value)을 기준으로 오름차순하고 싶으면 어떻게 해야할까? 바로 EntryS..
[코드스쿼드] 숫자 야구게임 문제 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방의 수를 맞추면 승리한다. [예] 상대방의 수가 425일 때, 123을 제시한 경우 : 1 스트라이크 456을 제시한 경우 : 1 스트라이크 1볼 789를 제시한 경우 : 낫싱 위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면..
[Java] Math.random( ) 원하는 범위 설정하기 Math.random( ) 의 원리는 다음과 같다. 0.0 < = Math.random( )