목록분류 전체보기 (71)
작심 365
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12985 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이이 문제는 n 명의 참가자 중 a와 b가 서로 만나게 되는 라운드를 반환하는 문제이다.가장 처음 참가 번호를 의미한다.매 경기가 끝날때마다 전체 수는 절반으로 줄기때문에 내가 어떤 번호로 바뀌는 지가 중요하다.1,2 에 속해 있던 사람은 1번, 3,4에 속해 있던 사람은 2번, 5,6은 3번 7,8은 4번 으로 바뀐다. 일반화 시켜서 표현하면 x가 홀수이면 x = x/2 + 1 , x가 짝수이면 x = x/2 로 표현할 수 있고 매..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/59036 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이주어진 테이블이 하나밖에 없기때문에 해당 테이블에서 정보를 추출하면 된다.동물 정보가 ANIMAL_INS 테이블에서 아픈 동물의 Id와 이름만 출력하라고 했기때문에FROM 절에는 테이블 명 지정WHERE 절에서는 컨디션이 Sick인 조건으로 필터링하고Id 순으로 조회를 하라고 했으므로 ORDER BY 절을 사용해서 id 순으로 오름차순 정렬한다.마지막으로 SELECT 절에서 동물 정보중 Id 와 이름만 출력하도록 한다. SELE..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/133025 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이주문량은 TOTAL_ORDER 테이블에, 아이스크림 성분은 ICECREAM_INFO 테이블에 있기때문에 두 테이블을 join 한다.join을 할때, 해당 문제에서는 성분과 수량 둘다 필요한 정보이기 때문에 교집합인 inner join 을 사용했다.FROM 절에서는 두 테이블을 join 하고 WHERE 절에서는 join 한 테이블에서 조건을 줘서 원하는 정보를 필터링 했다.ORDER BY 를 통해서 조건에 부합하는 정보들을 주문량 ..
1. 이메일 계정 만들기이메일을 전송할때 사용할 구글 계정을 하나 생성한다.자주 쓰는 본래 계정을 그대로 사용하면 메일을 너무 많이 보낼시 계정이 중지될수도 있으니 가능하면 새로 생성해서 하는게 좋다.2. Gmail 페이지에서 톱니바퀴 버튼을 클릭하고 See all settings 클릭3. Forwarding and POP/IMAP 에서 설정 추가POP 와 IMAP 사용 허용으로 바꾸고 저장한다.4. 2단계 인증 설정2단계 인증 설정을 안했을경우 추가해준다.검색창에 앱 비밀번호라고 치고 앱 비밀번호를 설정하는 페이지에 들어간다.5. 앱 비밀번호 추가앱 이름을 작성하고 create 버튼을 누르면 애플리케이션에서 사용할 비밀번호가 생성된다.
문제 : https://www.acmicpc.net/problem/6603풀이 이 문제는 k 개의 숫자 중에서 무조건 6개를 고르는 방법의 수를 구하는 문제이므로 모든 경우의 수를 다 확인해 봐야한다. 모든 경우의 수를 다 확인한다고 해도 k가 나올 수 있는 최대 값이 13 이므로 2^13 = 8192 번 이므로 시간내에 충분히 확인이 가능하다.모든 경우를 다 확인해도 되지만 이 문제의 경우 백트래킹을 사용해도 된다. (상태 공간 트리를 생각하면 쉽게 아이디어가 떠오른다.)답을 출력할때 오름차순으로 출력을 해야된다는 조건이 있으므로 항상 해당 인덱스의 값을 추가하는것을 먼저 한다. 코드 package baekjoon;import java.util.ArrayList;import java.util.Sca..
문제 : https://www.acmicpc.net/problem/2206풀이 벽 부수고 이동하기 문제의 경우 벽을 최대 한번밖에 부술수 없기 때문에 벽을 부쉈는지 여부를 알고있는게 중요하다. 보통 정점을 정의할때 (x,y) 로 정의하지만 벽 부순 여부를 저장하기 위해 (x,y,k) 라고 정의하고 푼다. 코드package baekjoon;import java.util.Scanner;import java.util.*;class Pair { int x, y, z; Pair(int x, int y, int z) { this.x = x; this.y = y; this.z = z; }}public class Main { public static int[..
문제 : https://www.acmicpc.net/problem/14503 Idea이 문제를 쉽게 풀기위해서는 격자상 동서남북 이동 을 위한 배열을 선언할때 청소기가 바라보는 방향의 값과 배열의 인덱스를 일치시켜서 풀어야 된다. 청소기는 청소 작동이 중지되기 전까지 같은 일을 반복하기 때문에 while 문 안에 모든 로직을 작성한다.그리고 코드 흐름이 분기되는 경우는 크게 두가지인데 , 주변 4칸중 청소되지 않은 빈 칸이 없는 경우와 있는 경우로 나뉜다.따라서 이 부분을 if else 문으로 처리해 주었다. 문제에서 방의 가장자리는 벽이라고 했기때문에 청소기가 위치를 이동하는 경우에 해당 위치가 배열의 인덱스 범위를 벗어나지 않는지 확인하는 부분은 건너뛰어도 된다. 문제를 풀면서 생각하기 어려웠던 ..
문제 : https://www.acmicpc.net/problem/17836 Idea문제를 보고 처음 생각한 것은 당연히 BFS를 한번만 돌려서 답을 찾는 것이였다. BFS 방식으로 길을 탐색하다가 칼을 만난 이후로는 벽도 부술수 있게 코드를 작성하면 될거라고 생각했다. 하지만 이 문제의 경우 그렇게 풀면 오답이고 칼이 없다고 생각하고 공주한테 가는 최소시간과 칼을 반드시 잡고 공주한테 가는 최소시간을 따로 구해야 한다. 그 이유는 다음과 같은 경우를 생각해 보면 알 수 있다. 이 경우는 칼을 잡기 위해 올 수 있는 길이 아래 한 가지 뿐이고 해당 칼을 잡은 뒤에는 왔던 길이 이미 방문처리가 되어있어서 다시 지나갈 수 없다. 하지만 가장 빠른 길은 칼을 잡고 다시 아래로 내려가고 벽을 부순뒤에 바로 공..