본문 바로가기

전체 글62

[BOJ] 백준 9205번 - 맥주 마시면서 걸어가기(with Java) 알고리즘 아이디어를 떠올릴 수 있다면, Floyd-Warshall 알고리즘을 이용해서 간단하게 BFS로 풀 수 있는 문제이다. 설계를 잘했다면 문제를 푸는 방법은 매우 간단하다. 우선, 각각의 위치를 정의해줘야만 하는데 좌표가 음수가 될 수도 있으므로 배열을 이용한 풀이는 어렵다. 따라서 현재 위치 x, y 좌표와 해당 위치의 방문 여부 정보 및 시작점과의 거리 정보를 담고 있는 클래스를 만들어준다. 또한, 모든 편의점과 목적지는 시작점과의 거리 정보를 무한대로 설정해주고 각각의 객체들을 리스트에 넣어준다. 이제부터 각각의 정점들에 대해서 BFS를 수행하면 되지만, 여기서 고려해줘야할 사항이 하나 있다. 문제에서 주어진 '맥주 한 박스에는 맥주가 20개 들어있다', '50미터를 가려면 그 직전에 맥주 한.. 2021. 12. 15.
[BOJ] 백준 18310번 - 안테나(with Java) 알고리즘 잘못된 아이디어를 떠올려서 시간초과가 난 이유에 대해서 고민하다가 결국 풀지 못하고 구글링을 통해서 해결하였다. 처음에는 각각의 집에 대해서 다른 집들과의 거리의 합을 비교해서 합이 최소인 집을 구하는 방식으로 접근하였다. 하지만 입력이 최대 20만에 도달했기 때문에 시간복잡도는 O(N^2)로 시간초과가 나게 돼서 풀이에 실패하였다. 구글링을 통해서 다른 사람들이 푼 코드를 참고해보니 풀이가 의외로 간단하였다. 집들을 전부 오름차순으로 정렬시킨 후에 중간에 위치한 집을 찾는 것이 전부였다. 알고리즘을 위와 같이 짜게 되면, 어떤 테스트케이스가 주어져도 각각의 집에 대한 합이 최소값을 이루게 된다. 소스코드 문제링크 18310번: 안테나 첫째 줄에 집의 수 N이 자연수로 주어진다. (1≤N≤200.. 2021. 12. 14.
[BOJ] 백준 1874번 - 스택 수열(with Java) 알고리즘 풀이 시간이 상당히 오래걸렸다. 우선 리스트를 만들어서 입력받은 스택 수열을 하나씩 집어넣는 것으로 시작하였다. 처음에는 스택에 push, pop하는 과정을 통해서 연산을 뽑아놓고, 그 연산으로 다시 스택 수열을 만들어서 입력을 받은 리스트와 비교를 했기 때문에 과정도 번거롭고 시간복잡도가 크게 나왔다. 어떤 부분을 생략해서 시간복잡도를 줄일 수 있을까 고민한 끝에 비교하는 방식이 문제지 않을까하는 생각을 하게 됐다. 따라서 비교하는 방식을 과감하게 삭제하고 1부터 N까지의 숫자에 대해서 스택에 푸시를 하는데, 스택에 쌓인 모든 숫자에 대해서 맨 위에 있는 숫자가 현재 리스트가 가리키는 숫자와 일치하는 경우에만 스택으로부터 팝을 해주었고 리스트가 가리키는 숫자를 바꿔줘서 조건을 만족할 때까지 계.. 2021. 12. 14.
[BOJ] 백준 14916번 - 거스름돈(with Java) 알고리즘 문제에서 궁극적으로 구하고자 하는 답은 거스름돈 N이 주어질 때, 거슬러주는 동전의 최소 개수이다. 따라서 다른 DP 문제들과 마찬가지로 N 이하에서의 DP 값을 모두 알아야만 한다. 이 문제에서 알아둬야할 부분은 '손님이 2원짜리와 5원짜리로만 거스름돈을 달라고 한다' 이다. 다시 말해서 2원 또는 5원으로 거슬러줄 수 없는 경우가 존재한다는 뜻이며, 이 경우에는 -1을 넣어줘야만 한다. dp[0]을 구해보자. dp[0]은 거스름돈 0이 주어질 때, 거슬러주는 동전의 최소 개수이다. 하지만 거스름돈이 0이라면 거슬러줄 필요가 없으므로 거슬러주는 동전의 최소 개수는 0, 즉 dp[0] = 0이다. dp[1]은 거스름돈 1이 주어질 때, 거슬러주는 동전의 최소 개수이다. 거스름돈이 1인 경우에는 .. 2021. 12. 5.
[IntelliJ] IntelliJ(인텔리제이) IDEA Ultimate Version 설치 방법 1. JetBrains 학생 인증 신청 사이트에 접속해줍니다. 2. 신청서 양식에 맞게 내용을 채워주고 아래의 '무료 제품 신청' 버튼을 눌러줍니다. 3. 신청할 때 기입했던 이메일 주소를 확인해서 두번째 사진에 표시된 링크를 클릭해줍니다. 4. 'JetBrains' 제품의 사용에 동의하는지 물어보는데, 끝까지 스크롤을 내려준 후에 'I Accept'를 눌러줍니다. 5. 이후에 회원가입 또는 로그인을 진행하면 이전에 작성한 이메일 주소로 이메일이 전송되는데 확인해줍니다. 6. 전송된 이메일을 통해서 로그인 또는 회원가입을 마무리해줍니다. 7. 이후에 로그인하여 확인해보면 학생 인증이 완료된 것을 알 수 있습니다. IntelliJ IDEA Ultimate을 눌러줍니다. 8. Ultimate 버전에서 'Do.. 2021. 10. 18.
[IntelliJ] IntelliJ(인텔리제이) IDEA Community Version 설치 방법 1. IntelliJ IDEA 설치 사이트에 접속합니다. 2. 아래의 'Download' 버튼을 눌러줍니다. 3. Community 버전에서 'Download'를 누르면 감사하다는 말과 함께 다운로드가 시작됩니다. 4. 설치 마법사가 실행되는데 'Next'를 눌러줍니다. 5. 설치할 폴더를 정해주고 'Next'를 눌러줍니다. 6. 아래에 동그라미 표시된 곳들을 모두 체크하고 'Next'를 눌러줍니다. Create Desktop Shorcut : 바탕화면에 바로가기 생성 Update PATH Variable : 윈도우 환경변수에 자동으로 추가 Update Context Menu : '폴더를 프로젝트로 열기' 기능 추가 C.. 2021. 10. 18.
[MySQL] 데이터를 검색하는 SELECT 명령어의 응용 및 예제 정리(4) - 합집합, 교집합, 차집합 들어가기에 앞서 본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다. 이번 게시물에서는 2개 이상의 테이블 데이터를 하나로 통합하는 집합 연산(합집합, 교집합, 차집합)에 대해서 알아보겠습니다. 예제에 사용되는 테이블 소개 mysql> SELECT * FROM student; +--------+---------+-------------+--------+------------+---------------+ | stdnum | stdname | major | sex | birthdate | phonenum | +--------+---------+-------------+--------+------------+---------------+ |.. 2021. 10. 2.
[MySQL] ERROR 1822 (HY000): Failed to add the foreign key constraint - 외래키 제약조건의 삭제 & 추가를 통한 외래키 변경 방법 들어가기에 앞서 본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다. 이번 게시물에서는 외래키 제약조건을 설정해주거나 외래키 설정을 바꿔줄 때 발생하는 오류를 해결하는 방법에 대해서 알아보겠습니다. 제거할 제약조건의 이름 확인 # 테이블명이 student인 테이블의 제약조건 목록을 확인 mysql> SELECT * FROM information_schema.table_constraints WHERE table_name='student'; +--------------------+-------------------+-----------------+--------------+------------+-----------------+-------.. 2021. 10. 2.
[MySQL] 데이터를 검색하는 SELECT 명령어의 응용 및 예제 정리(3) - IN, NOT IN, EXISTS, NOT EXISTS 들어가기에 앞서 본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다. 이번 게시물에서는 서브쿼리에 값이 존재하는지(존재하지 않는지) 판별하는데 사용되는 'IN', 'NOT IN', 'EXISTS', 'NOT EXISTS'에 대해서 알아보겠습니다. 예제에 사용되는 테이블 소개 mysql> SELECT * FROM student; +--------+---------+-------------+--------+------------+---------------+ | stdnum | stdname | major | sex | birthdate | phonenum | +--------+---------+-------------+--------+--.. 2021. 9. 30.
[MySQL] 데이터를 검색하는 SELECT 명령어의 응용 및 예제 정리(2) - LIKE 들어가기에 앞서 본 게시물은 'MySQL 8.0' 버전을 이용한 '명령 프롬프트(cmd)' 환경에서 작성한 코드를 토대로 만들어졌습니다. 이번 게시물에서는 대표 문자를 이용하여 지정된 속성의 값이 패턴과 일치하는 데이터를 검색하는 'LIKE'에 대해서 알아보겠습니다. LIKE - 지정된 속성의 값이 대표 문자의 패턴과 일치하는 데이터를 검색 # student 테이블의 전체 속성에 대해서 sex 값이 'F'로 시작하는 데이터를 모두 검색 mysql> SELECT * FROM student WHERE sex LIKE 'F%'; +--------+---------+-------------+--------+------------+---------------+ | stdnum | stdname | major | .. 2021. 9. 30.