본문 바로가기

스물아홉 청년 도전가 박기완

intellij로 스프링 실행시 test만 자꾸 실행될때 원인은 모르겠지만 아래사진처럼 Configurations안에 JUnit만 있고 application이 없었다. 그래서 실행시마다 계속 테스트부분만 실행됐고 main이 실행되지 않았다. 저 창에서 + 눌러 Application추가후 jdk잡아주고 실행할 파일 잡아주니 클리어 더보기
스프링부트 빌드시 커맨드로 jdk설정 바꾸기 >gradlew build -D org.gradle.java.home="C:\Program Files\Java\jdk-11.0.11" 내 윈도우10컴퓨터에 JDK_HOME을 8로 잡아놔서 인프런예제 따라 커맨드창에서 gradlew build 하려는데 안됐다. 인프런예제는 자바jdk 11로 진행중이였고, jdk_home 이 11이 아니여서 잠시 빌드동안만 직접 바꿔주는 형태로 -D 를 사용하면된다. 더보기
프로그래머스 더 맵게 문제 풀이 안녕하세요! 오늘은 프로그래머스 문제 더맵게 를 풀었습니다. programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같�� programmers.co.kr 문제 자체는 heap에 대한 이해만 있다면 충분히 쉽게 풀 수 있는 문제인데요, 전 힙 stl이 익숙하지 않아서 직접 구현했습니다. 1. 우선 스코빌 지수가 가장 작은값이 루트로 와야하므로, 최소힙을 구성했습니다. 2. 최소힙을 만들고, 맨위 원소 2개를 뽑아 계산후, 다시 힙에 삽입. 이 두과정을 .. 더보기
프로그래머스 소수 찾기 문제 안녕하세요! 오늘은 프로그래머스 소수찾기 문제를 풀었습니다. programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 � programmers.co.kr 이 문제는 모든 경우의수를 따지기만해도 충분히 풀 수 있습니다. numbers 길이가 최대 7이고, numbers는 숫자 0~9로 이루어져있기에 최대 가능한 숫자가 9,999,999 입니다. 에라토스테네스의 체를 이용해 소수를 파악하고, numbers 길이가 최대 7이므로 나올 수 있는 모든 숫자 .. 더보기
프로그래머스 단어 변환 문제 안녕하세요! 오늘은 프로그래머스 단어 변환 문제를 풀었습니다. programmers.co.kr/learn/courses/30/lessons/43163# 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 이 문제의 묘미는 주어진 단어들을 이용해 그래프로 만들 수 있냐 였습니다. 단어끼리 변환이 가능하다면 그래프 상에 연결됐다란 처리를 해서, 출발지부터 목적지까지 bfs 탐색을 진행해 최소거리를 찾으면 해결 끝! #include #include #include using .. 더보기
프로그래머스 네트워크 문제 안녕하세요! 오늘은 프로그래머스의 네트워크 문제를 풀었습니다. 전형적인 union find문제기도 했지만, 한편으론 단순히 dfs돌리면서 같은그룹인지 확인할 수 있는 문제였습니다. programmers.co.kr/learn/courses/30/lessons/43162# 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있�� programmers.co.kr 접근과정으로 1. computers 배열에 들어온 데이터를 갖고 하나씩 순회하면서, 연결관계를 파악했습니다. 2. 두 지점이 연결되있으면 union find를 실행해 하나의 네트워크로 묶.. 더보기
프로그래머스 타겟 넘버 문제 안녕하세요! 오늘은 프로그래머스의 '타겟 넘버'를 풀어보았습니다. programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr 단순히 각 숫자를 더하냐 빼냐를 최대 20번 반복하는 형태여서 2의 20승. 최대 백만번 호출로 정답을 찾을 수 있었습니다. 전체탐색 방법으로 반복문을 돌리든, 재귀함수를 돌리든 편한걸 택하면 되는데, 전 재귀함수가 좀더 직관적인거같아 재귀로 구현했습니다. .. 더보기
프로그래머스 가장 먼 노드 문제 안녕하세요! 오늘도 프로그래머스 문제 가장 먼 노드를 풀어보았습니다. 사실 이 문제는 가중치가 없는 그래프에 최단거리 이야기까지 나왔으니 100% bfs를 이용하면 쉽게 풀 수 있습니다. bfs의 특징을 이용하면 한단계 한단계씩 다음 노드로 접근하게될거고, 마지막 접근한 노드들만 쭉 찾아서 갯수세주면 바로 해결! 조금 특이한건 bfs탐색을 위한 발견여부 배열에 해당 점을 발견한 당시 거리값을 저장시켰다는 점입니다. 마지막에 거리 최대값을 가진 애들만 쭉 반복문돌리며 갯수 세는식으로 만들기위해 ㅎㅎ. 그럼 오늘도 파이팅입니다! #include #include #include using namespace std; int solution(int n, vector edge) { //간선이용해 그래프 표현 vec.. 더보기
프로그래머스 입국심사 문제 안녕하세요! 오늘은 프로그래머스 입국심사 문제를 풀어보았습니다. programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 � programmers.co.kr 처음에 이문제를 보고 시간 흐름에 따라 반복문 노가다를 하면 되지않을까 싶었습니다. 하지만 입국심사 기다리는 사람수를 10억이라 치고 심사관 1명이라 했을때 문제해결과정으로 1초가 넘어갈게 뻔했습니다. 어떻게하면 좋을까 생각하다가 가능한 시간의 min과 max를 구해서 이진탐색을 돌리면 어떻게든 되지않을까 싶었.. 더보기
9장. 반복(2) . 10번 안에 정답을 맞추지 못하면 게임에서 패배합니다. 스무고개 게임을 만든다고 생각해봅시다. 어떻게 하면 위 사진처럼 동작하게 만들 수 있을까요? 1. 컴퓨터가 1~1000 사이 랜덤한 숫자를 생성하게 만든다. 2. 열 번 동안 아래 내용을 반복한다. 1) "정답을 맞추세요" 문구 출력 2) 숫자 입력 3) 입력 값과 정답 비교 이렇게 하면 될 것 입니다. 코드로 봐볼까요? 더보기 코드보기 #include #include #include int main() { //랜덤한 값을 만들어내는 기준 seed값 설정 srand(time(NULL)); //랜덤한 숫자 생성 (1~1000사이) int randomNumber= rand()%1000+1; //10번동안 아래 내용을 반복해라 for(int i=10;i>=1;i=i-1){ printf("\n%d 번안에 정답을.. 더보기
프로그래머스 스킬트리 문제 오늘은 프로그래머스 스킬트리 문제를 풀어보았다. programmers.co.kr/learn/courses/30/lessons/49993 코딩테스트 연습 - 스킬트리 programmers.co.kr 처음엔 스킬트리 컨셉이여서 위상정렬 관련된 이야기인가 싶었다. codeup.kr/problem.php?id=3212 위상 정렬(topological sort) 첫째 줄에 정점의 개수 v (2 더보기
프로그래머스 기능개발 문제 오늘은 프로그래머스 기능개발 문제를 풀었습니다. 문제 이해만 된다면, 정말 쉽게 해결가능한 문제였습니다. programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 �� programmers.co.kr 문제풀이 접근과정은 1. 작업당 필요 시간을 계산하고, 2. 누적된 시간보다 필요시간이 같거나 작다면, 이번 배포할 갯수에 추가 3. 누적된 시간보다 필요시간이 크다면, 배포할 갯수를 결과벡터에 담고, 누적된 시간 추가, 배포할 갯수 0으로 초기화후 한개 추가.. 더보기
프로그래머스 주식 가격 문제 오늘은 프로그래머스 주식가격 문제를 풀었습니다. programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr [1차 실수] 처음엔 이문제를 이진탐색 트리를 만들어 풀려고했습니다. prices벡터를 뒤에서부터 앞으로 탐색하면서, 이진탐색트리를 만들고, 당장 들어온 값보다 작은 애를 찾으려했죠. 근데 고려하지못한 부분으로 당장 들어온 값보다 작다면 가장 최근에 추가된 애를 찾아야하는건데, 그저 당장.. 더보기
8장. 배열. 게임 내 인벤토리를 만들어보자. 게임 인벤토리를 만든다고 생각해볼까요? 위 사진처럼 여러개의 칸이 있고, 아이템이 놓여있는 상황을 어떻게 하면 구현할 수 있을까요? 변수를 인벤토리 갯수만큼 만드는 것입니다. 값을 저장하려면 변수가 필요하니까요! 인벤토리에 5개 칸이 있고, 검(1), 방패 (2), 아이템 없음(3) 으로 가정했습니다. 이렇게 인벤토리를 만들 수 있지만, 단점이 존재합니다. 아이템 종류가 늘어나거나, 인벤토리 칸이 늘어날수록 코드길이도 늘어납니다. 아래처럼 칸이 많으면 코드가 엄청 길어집니다. 그래서 등장한 문법이 있습니다. 변수들을 한 곳에 모으겠다! 라는 컨셉을 가진, 배열입니다. 배열이 무엇인지 이해하기 위해 한가지 이야기를 들려드리겠습니다. 두 상황을 비교해보고, 어떤게 좀 더 편할지 골라주세요! 운동장에 철수, .. 더보기
7장. 반복. 몬스터와 싸워보자. 몬스터와 싸우는 기능을 만든다고 생각해볼까요? 아래 사진을 봅시다. 좌측처럼 한번만 공격하고 전투가 종료되는게 맞을까요,우측처럼 고블린이 죽거나, 플레이어가 도망쳐서 전투씬이 종료되는게 맞을까요? 좌측보단 우측이 맞을겁니다. 우리가 지금까지 배운거로 우측처럼 만들 수 있을까요?만들지 못합니다. 고블린의 HP가 몇인지 모르기에, 왼쪽의 코드를 몇번 더 써야할 지 모릅니다.이럴땐, 우측처럼 반복문 (while)을 이용해주면 우리가 원하는 횟수만큼 반복시킬 수 있습니다. 특정 동작을 원하는 만큼 반복시키는 방법을 C언어 용어론 '반복' 이라 부릅니다.반복엔 2가지 문법이 존재합니다. while과 for. 우선 while부터 알아봅시다.1. while 괄호안의 조건이 참이면 2. 중괄호 { } 안에 있는 내용이.. 더보기
6장. 조건. 어떤 물건을 구매하시겠습니까? 1)청동검 2)철검 잠시 머릿속에 게임 상점을 떠올려볼까요? 어떤 물건을 선택하냐에 따라 사용하는 돈과 구매하는 물건이 달라집니다. 스킬을 사용할때도 생각해볼까요? 누른 키가 무엇인지에 따라 다양한 스킬이 사용됩니다. 위처럼 선택한 내용에 따라 다양한 결과를 만드는 방법을 배워보려합니다. c언어 용어론 '조건'이라고 부릅니다. 조건이 참인지 거짓인지에 따라 실행할 내용을 다르게 만듭니다. 잠시 자판기를 떠올려볼까요? 자판기에 500원, 1000원짜리 음료수가 있을때 500원을 넣었다면 어떻게 될까요? 500원짜리 음료수 버튼에 빨간불이 들어오게됩니다. 1000원을 넣으면 어떻게 되죠? 500원, 1000원 음료수 에 빨간불이 들어오게됩니다. 코드로 봐볼까요? #include int main() { printf("음료수 자판.. 더보기
5장. 입력. 소지금을 입력해주세요. 이번 시간엔 정말 매력적인 '입력' 을 배워보겠습니다. 입력이 무엇을 의미하는지 이해 하기 위해 두 코드를 쳐보고 실행결과를 비교해봅시다. #include int main() { int money; money = 500; printf("소지금 : %d \n",money); return 0; } #include int main() { int money; scanf("%d",&money); printf("소지금 : %d \n",money); return 0; } 결과가 어떻게 나왔나요? 첫번째 코드는 실행하면 소지금 : 500 이라고 나오고, 두번째 코드는 아무것도 나오지 않습니다. 두번째 코드를 실행했을때 뜨는 창에서 숫자를 한번 써볼까요? 이런식으로 숫자를 쓴다음 Enter키를 눌러봅시다. 어떻게 됐나요.. 더보기
4장. 게임을 만들기 위한 5가지 필수 문법 프로그램은 0과 1로 이루어져있다 했습니다. 하지만 0과 1로 프로그램을 만들기엔 시간도 오래걸리고 어렵기에, C언어로 프로그램을 만들면, 컴파일러가 0과1로 바꿔준다고 말씀드렸습니다. 그럼 여기서 정말 중요한 핵심 질문!! 해보겠습니다. 아무렇게나 글씨를 쓴다고 0과 1로 바꿔줄까요? 정해진 문법대로 써야 그걸 0과1로 바꿔줄까요? 한국어도 정해진대로 써야 상대방이 알아듣지 ㅎㅈㅂㄷㄻㅈㄷㄹㅏㅓㅑㅜㅐㅑㄹ 이런 식으로 쓰면 상대방이 알아듣지 못합니다. 즉, 정해진 문법대로 써야 컴파일러가 0과 1로 바꿔서 프로그램으로 만들어 줍니다. 한번 테스트 해볼까요? #include int main() { int appleCost = 2000; print("사과 1개의 가격은 %d \n", appleCost); re.. 더보기
3장. 변수. HP가 50인 전사가 생성되었습니다. 잠시 머릿속에 자판기를 떠올려볼까요? 자판기를 보면 동전투입구와 지폐투입구가 있고, 얼마의 돈을 넣었는지가 조그만 창에 표시됩니다. 자판기에 오백원을 넣으면 화면에 500이라 표시되고, 천원을 더 투입하면 1500 이라고 표시됩니다. 사실 당연한 부분인데, 잘 생각해보면 신기한 부분이기도 합니다. 자판기가 들어온 돈을 기억하고있다가 추가로 들어온 돈을 더해서 표시해준거니까요. 즉, 자판기 내부엔 들어온 동전을 저장하는 공간이 있다 라고 생각해볼 수 있습니다. 다른 예를 들어볼까요? 에어컨을 생각해봅시다. 에어컨을 키면 현재 온도가 표시되고, 리모콘을 이용해서 목표온도를 설정할 수 있습니다. 목표온도를 설정하면, 에어컨이 목표온도 값을 기억하고있는건지 점차 현재온도가 목표온도를 향해 갑니다. 신기하지 않나.. 더보기
2장. 출력. 전사키우기 게임에 오신걸 환영합니다. C언어에서 출력이란 화면에 나타나는 모든걸 뜻합니다. 예를들어 지뢰찾기 게임을 켰을때 화면에 나타나는 지뢰들의 이미지. 이 모든걸 다 '출력'이라 합니다. 위 사진에서 보이는 모든 내용들 또한 출력입니다. 만약 화면에 어떤 내용을 출력하고 싶으면 어떻게 해야할까요? printf("");라는 명령어를 사용하면 원하는 내용을 출력할 수 있습니다. printf(" 출력하고싶은내용 작성"); 큰따옴표 안에 출력하고 싶은 내용을 작성하면 화면에 그대로 표시됩니다. 한번 따라해볼까요? #include int main() { printf("전사 키우기 게임에 오신걸 환영합니다. \n"); return 0; } 이렇게 적고 실행하면 printf 안에 작성한 내용이 그대로 표시되는걸 볼 수 있습니다. 만약 화면에 안녕!.. 더보기