본문 바로가기

전체 글

(261)
[백준] 1978 : 소수 찾기 JAVA 풀이 소수는 1과 자기자신 외의 약수를 가지지 않는 수이다. 어떤 수 n이 있을 때, n을 1부터 n으로 나누었을 때 나눠떨어지는 수가 단 2개여야 한다는 뜻이다. 따라서 입력될 숫자의 개수인 N을 입력받고 N개만큼의 숫자를 입력받은 뒤에 그 수의 약수가 2개일 때마다 소수의 개수를 증가시켜줬다. import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; import java.util.StringTokenizer; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new Buffer..
2022년도 2회 정보처리기사 필기 합격 후기 + 공부방법 원래 계획은 1회 시험에 응시하는 거였는데, 평일 알바가 너무너무 바빠서 도저히 공부할 시간이 없어 취소하고 2회 시험을 접수했다. 전공자 준비기간 - 3주 사용교재 - 2022 시나공 공부방법 1) 시나공에서 A, B 등급으로 표시된 섹션을 노션에 요약정리하면서 개념을 한 번 훑음 (중간중간 인터넷에 올라와있는 요약집에 있는 두음법칙 참고함) 2) 섹션마다 있는 '기출문제 때려잡기' 풀음 3) 한 과목을 다 봤으면 시나공 교재에 있는 기출문제(20, 21년도)에서 '그 과목' 문제들만 풀어봄 4) 위 과정을 3과목까지 진행하고 5개년 기출을 3회독함(개정 후 문제들은 5번 정도 풀은 듯) 공부를 하는 도중에 방식을 계속 바꾸느라 위에 적은 공부방법이 너무 뒤죽박죽이긴 한데 누군가에겐 도움이 될까 싶어서..
[백준] 2775 : 부녀회장이 될 테야 JAVA 풀이 1. 0층에 사는 사람 수를 배열에 저장함 2. 1의 배열을 이용해서 1층의 n호실까지 그 방에 살기 위해 데려와야 하는 사람의 수를 구해서 배열에 새로 저장함 3. 업데이트된 배열을 이용해 k-1층까지 반복. 이런 방식으로 문제를 해결했다. 부족한 설명이지만, 문제에 주어진 예제 입력인 k = 1, n = 3으로 예를 들어보겠다. 맨 처음 0층에 사는 사람 수를 저장하고 있는 배열은 이렇다. { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0} (문제에서 1호부터 시작한다고 했으니 인덱스 0번을 1호로 삼았다.) 이것을 이용해 1층의 3호실까지 살기 위해서 필요한 사람 수를 구해서 다시 배열에 저장한다. { 1, 1+2, 1+2+3, .....} n호실 이후는 필..
[백준] 2839 : 설탕 배달 JAVA 풀이 이 문제에서는 봉지의 최소 개수를 찾아야 하는데, 가능한 한 5kg짜리 봉지를 가져가야 한다는 것이다. 입력받은 N이 5로 나눠떨어지면 바로 N을 5로 나눈 몫을 출력하면 된다. 그렇지 않은 경우에는 3kg 봉지를 하나씩 추가하면서, 남은 무게가 5로 나눠떨어지는지 체크했다. import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.IOException; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));..
[백준] 10250 : ACM 호텔 JAVA 풀이 문제의 길이를 보고 좀 겁먹었는데 의외로 금방 풀 수 있었다. 101 - 201 - 301 - 401 - 501 - 601 - 102 - 202 - 302 - 402 - 502 - 602 같은 순서로 방이 배정되는데 테스트케이스의 개수를 T 건물의 층수를 H 한 층의 객실수를 W 방을 배정해야 할 손님의 번호를 N 라고 했을 때 층수는 N % H라는 걸 알 수 있다. 이때 주의해야 할 점이 있는데 N이 12고 H가 6이라면 원래대로라면 6층에 배정이되어야 하는데 나머지가 0이라서 0층에 배정되는 문제가 발생한다. 필자도 채점을 해보니 자꾸 오답이 나와서 왜인지 고민을 해보니 이 부분을 처리하지 않은 게 문제였다. 아무튼 N이 H로 나눠떨어질 때에는 H 그 자체가 층수가 된다. 이제 호수를 구해보자. 호수..
[백준] 2869 : 달팽이는 올라가고 싶다 JAVA 풀이 시간제한이 있다는 걸 보긴 했지만 우선 반복문으로 풀어보았다. 결과는 당연히 시간초과였고 식을 대체 어떻게 찾아야 하나 고민을 해봤다. V까지 올라가는 데에 필요한 날짜를 N이라고 했을 때 1일차 낮 : A 1일차 밤 : A - B 2일차 낮 : A - B + A 2일차 밤 : A - B + A -B 이런식으로 진행이 되는데 중요한 점은 이미 V에 도달했다면 더 미끄러지지 않는다는 점이다. 낮과 밤이 한 세트가 아니라는 뜻이니, 낮에 V에 도달했는지 검사하고 그렇지 않으면 하루를 더 추가하기로 했다. 다시 낮의 식을 보면 N*A - (N-1)*B 로 나타낼 수 있는데, 이것이 V 이상이 될 때의 N을 찾아야 하는 문제인 것이다. 이를 식으로 나타내면 V = N*A - N*B + B V - B = N(A-..
[백준] 1193 : 분수찾기 JAVA 풀이 분명 카테고리는 '기본' 수학1인데 나에겐 너무 어려웠다.. 메모장을 켜놓고 정리해가면서 겨우 규칙을 찾았다 ㅜㅜ 위 그림을 보면 대각선이 짝수번째일 때는 분자는 커지고, 분모는 작아지며 홀수번째일 때는 이와 반대라는 것을 알 수 있다. 그리고 다음과 같이 코드를 작성할 순서를 정했다. 1. 원하는 분수 번호를 입력받는다. 2. 입력받은 번호가 몇 번째 대각선에 있는지 찾는다. 3. 입력받은 번호가 그 대각선에서 몇 번째에 있는지 찾는다. 4. 대각선의 진행방향에 따라 원하는 분수의 값을 찾는다. 변수는 세 개를 사용했다. 1. 찾아야 하는 분수의 번호 X 2. 몇 번째 대각선인지를 의미하는 line 3. 그 대각선까지 존재하는 총 칸의 개수 cnt 이 변수들로 대각선이 짝수번째일 때와 홀수번째일 때 값..
[백준] 2292 : 벌집 JAVA 풀이 벌집을 잘 보면, 한 층씩 올라갈수록 방의 총 개수가 6*(층수)개씩 증가한다는 걸 알 수 있다. 이를 이용해서 방의 총 개수가 입력받은 N을 넘어갈 때까지 반복문을 돌렸다. 예를 들어 N이 13일 때, 2층은 방의 개수가 7이고 3층은 방의 개수가 19개가 된다. 그럼 N(17)은 3층의 방의 개수인 19보다 작으니, 3층에 있다는 걸 알 수 있는 것이다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main{ public static void main(String[] args)throws IOException{ BufferedReader br = new Bu..