본문 바로가기

전체 글61

[백준] 14503 로봇 청소기 (Java) [14503 로봇 청소기] 난이도: 골드5 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net 문제 입력 출력 [아이디어] 문제에 써있는 설명대로 코드를 작성해주면 되는 시뮬레이션 문제이다. 조심해야되는 부분은 후진할 때는 청소를 한 장소여도 후진할 수 있다. 그리고 후진한 후 청소를 다시 해주면 안된다는 것이다. 청소하지 않은 장소인 경우에만 청소해주자. [JAVA 코드] package bj.g5; import java.io.*; import java.util.*; public class BJ_G5_14503_.. 2022. 6. 6.
[백준] 17779 게리맨더링2 (Java) [17779 게리맨더링2] 난이도: 골드4 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 문제 입력 출력 [아이디어] 가능한 모든 경우들을 완탐으로 풀었다. 1, 2, 3, 4번 선거구역을 나눠주고 해당되지 않는 구역을 5번 구역으로 판단해서 값을 구해줬다. 여기서 선거구역을 나눌 때 경계선의 꼭지점들을 기준으로 판단해주었다. 예를 들면, x = 4, y = 3, d1 = 1, d2 = 1 의 경우 1번 선거구역을 찾기 위해 (x, y) => (4, 3) 을 기준으로 위에 있는 칸들을 먼저 찾아주고 r이 3이하인 .. 2022. 6. 3.
[백준] 2141 우체국 (Java) [2141 우체국] 난이도: 골드4 2141번: 우체국 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 0 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다. www.acmicpc.net 문제 입력 출력 [아이디어] 입력할 때 우체국 위치 순서대로 입력한다는 말은 없기 때문에 중간에 정렬을 해줘야한다. 전체 인구 수의 절반 이상이 넘어가면 그 위치가 정답이 된다. 하지만 전체 인구 수가 홀수일 수 있어서 1을 더한 값으로 계산해줘야한다. [JAVA 코드] import java.io.*; import java.util.*; publ.. 2022. 6. 3.
[백준] 13265 색칠하기 (Java) [13265 색칠하기] 난이도: 골드5 13265번: 색칠하기 각 테스트 케이스에 대해서 possible 이나 impossible 을 출력한다. 2 가지 색상으로 색칠이 가능하면 possible. 불가능하면 impossible 이다. www.acmicpc.net 문제 입력 출력 [아이디어] 먼저 동그라미들을 노드로 갖고 연결된 직선을 엣지로 생각해주었다. 그 후 노드에 대해 DFS를 사용하여 연결된 노드 두개가 같은 색이라면 impossible, 아니라면 possible을 출력하도록 하였다. [JAVA 코드] import java.io.*; import java.util.*; public class BJ_G5_13265_색칠하기 { static BufferedReader br = new BufferedR.. 2022. 5. 29.
[백준] 11653 소인수분해 (Java) [11653 소인수분해] 난이도: 실버5 11653번: 소인수분해 첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다. www.acmicpc.net 문제 입력 출력 [아이디어] 처음에는 나누는 수가 소수인지 판단해주는 방식을 사용하였다. 그런데 계속 시간 초과가 떴다. 왜 그럴까 생각해보니 이미 소수이면 해당 수로 다 나누기 때문에 그의 배수로는 나눌 수 없다. 예를 들면 12 = 2 x 2 x 3 이다. 이 때, 12 % 2 == 0 이므로 12 / 2 = 6 / 2 = 3 을 만들어버린다. 따라서 이후에 4, 6, 8 등으로는 나눌 수 없게 된다. 물론 그 전에 수가 1이 된다면 반복문을 빠져나온다. [JAVA 코드] import java.io.*; public class Main {.. 2022. 5. 26.
[Vue] Vue.js watch 옵션 watch는 데이터의 값이 변경될 때 실행되는 함수이다. data: { oldData: '', }, watch: { oldData: function(newData) { // 원하는 동작 } } oldData의 값이 변할 때 watch는 변화된 값을 함수의 인자로 받아 함수를 실행시킨다. 데이터의 변화에 따라 특정한 로직이 작동되어야 하는 경우 유용하다. watch 옵션은 기능상 매우 우용하지만, 너무 많이 사용하면 부수효과가 많이 생길 수 있다. 같은 값을 서로 다른 컴포넌트에서 관찰하고 서로 다른 로직이 실행되는 경우 에러가 발생할 수 있기 때문이다. 컴퍼넌트의 구조가 복잡하다면 그 에러를 발견해 고치기 어렵다. [참고 사이트] Vue.js watch옵션 (감시자) : 네이버 블로그 (naver.com.. 2022. 5. 24.
[JWT] 토큰 생성하기 JWT를 이용하여 Spring Boot에서 토큰을 생성해보자 pom.xml에 의존성 추가 io.jsonwebtoken jjwt 0.9.1 application.properties에 필요한 변수 설정 # 토큰 유효 기간 (min - 2시간 정도이므로 120) jwt.expmin=2 # 토큰 생성에 사용할 salt jwt.salt=HAPPYHOUSE JwtUtil 작성 package com.ssafy.happyhouse.jwt; import java.util.Date; import java.util.Map; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; impor.. 2022. 5. 22.
[백준] 2580 스도쿠 (Java) [2580 스도쿠] 난이도: 골드4 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 문제 입력 출력 [아이디어] 스도쿠에 빈칸들을 따로 저장해주었고, 행, 열, 사각형에 같은 숫자가 있는지 빠르게 체크해주기 위해서 배열을 따로 생성해주었다. static boolean [][] row = new boolean [9][10]; static boolean [][] col = new boolean [9][10]; static boolean [][] square = new boolean [9][10]; row[i][j.. 2022. 5. 21.
[MyBatis] selectKey 게시판 CRUD를 만들면서 단위테스트를 진행할 때, insert 후 해당 게시글의 번호가 필요할 때가 있다. 이 때, autoIncrement로 채번해서 사용했기 때문에 단위테스트를 진행하면서 불편함을 느꼈다. 이러한 불편한 점을 해결하고자 selectKey를 사용해주었다. order: 데이터가 추가되지 전/후 시점으로 BEFORE/AFTER 을 지정 (대소문자 가린다.) resultType: 조회 결과의 타입 keyProperty: 조회된 결과를 저장할 DTO의 속성명 insert 진행하는 sql 구문 select max(noticeno) from notice insert into notice(title, content, writer) values(#{title}, #{content}, #{writer.. 2022. 5. 21.
[MySQL] Error Code: 3780 해결 에러 내용: Error Code: 3780. Referencing column 'writer' and referenced column 'id' in foreign key constraint 'fk_notice_userinfo1' are incompatible. 원인/해결: userinfo 테이블을 생성할 때, 아래와 같은 속성을 사용하여 생성했는데 DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci notice 테이블을 생성할 때는 저걸 사용하지 않아서 character set과 collate 을 추가해주지 않아서였다. 테이블을 생성할 때 추가해주니 테이블 생성이 되었다! 2022. 5. 21.
[백준] 11509 풍선 맞추기 (Java) [11509 풍선 맞추기] 난이도: 골드5 11509번: 풍선 맞추기 첫 번째 예제 에서 [5,4,3] 을 터트리고 [2,1]을 터트리면 모든 풍선을 터트릴 수 있으므로 최소한 2개의 화살을 필요로 한다. www.acmicpc.net 문제 입력 출력 [아이디어] 처음에는 남아있는 풍선 중 가장 높이 있는 풍선의 높이를 찾아주기 위해 풍선들을 모두 탐색하려고 하였다. 하지만 풍선의 개수가 100만개이므로 모든 풍선이 다 터질 때까지 계속 반복하면 시간초과가 난다. 따라서 풍선 중 가장 높이 있는 높이를 구해주기 위해 우선순위 큐를 사용하였다. [JAVA 코드] import java.io.*; import java.util.*; public class Main { static BufferedReader br.. 2022. 5. 20.
[백준] 15681 트리와 쿼리 (Java) [15681 트리와 쿼리] 난이도: 골드5 15681번: 트리와 쿼리 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) 이어 N-1줄에 걸쳐, U V의 형태로 트리에 속한 간선의 정보가 주어진다. (1 ≤ U, V ≤ N, U ≠ V) www.acmicpc.net 문제 입력 출력 [아이디어] 처음에는 트리를 생성해준 뒤 쿼리 개수만큼 정점의 수를 구했는데, 시간 초과가 났다. 그래서 문제 아래 있는 힌트대로 정점의 개수를 구하는 함수를 구현해주었다. [JAVA 코드] import java.io.*; import java.util.*; public class Main { static BufferedReader br = n.. 2022. 5. 20.