본문 바로가기

IT 이야기

(31)
[JAVA] 2606번 바이러스 문제링크 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net 문제해석 전형적인 탐색문제입니다. 1번 노드와 연결되어있는 노드의 개수가 몇개인지 파악하면 되므로, DFS 혹은 BFS로 탐색을 하여 연결된 노드를 탐색하면됩니다. 노드를 초기화 할 때는 양쪽 노드에 값을 추가해주어야 문제코드 1. DFS import java.lang.reflect.Array; import java.util.*; import java.io.*; public class Main { public static boolean[] visited; p..
[JAVA] 2579번 계단 오르기 문제링크 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제해석 해당 문제는 동적 프로그래밍의 기초문제라고 볼 수 있습니다. 처음에 문제를 접근할 때는 완전탐색으로 문제를 풀이하려고 하였습니다. 그래서 식을 나열하여 규칙을 찾아내려고 하였으나 상당한 어려움에 직면하게 되었습니다. 인터넷을 조사하던 끝에 DP문제임을 알게되었고, DP를 기반으로 기본항을 찾아내는 모습을 찾을 수 있었습니다. 1. 마지막 계단을 N번째 계단이라고 가정하였을 시, N-2 + N번째 계단을 밟는 경우 2. 마지막 계단을 N번째 계단이라고 가정하..
[JAVA] 10845번 큐 문제링크 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제해석 Queue를 기반으로 메서드를 활용해보는 문제입니다. 해당 문제에서는 "back"과 같은 가장 뒤의 값을 확인하는 경우가 있기에, 앞 뒤로 값을 자유롭게 추가하고 제거할 수 있는 "Deque" 자료구조를 활용하게 되었습니다. 사용하는 메서드가 peekFirst( ), peekLast( ) 등을 활용하고 있는데, 값이 존재하지 않을 경우 null을 반환하게 되므로 해당 경우에는 -1을 출력하는 식으로 코드를 구현하였습니다. ※ ad..
Django 가상환경 설치방법(vscode) Django The web framework for perfectionists with deadlines. docs.djangoproject.com 1. cmd창을 실행¶ 윈도우에서 Default로 PowerShell이 실행됐었는데, cmd로 새로 실행해줍니다. 파일-기본설정-설정에서 Default 실행 값을 변경할 수 있습니다. 2. cmd창에서 가상환경을 생성¶ python -m venv 가상환경이름 가상환경이 생성되면 왼편 목록에 추가됩니다. 3. 가상환경을 생성 후 실행합니다.¶ 가상환경이름\Scripts\activate로 실행합니다. 가상환경이 실행될 경우 터미널 앞쪽에 (가상환경이름)형태로 나타나게 됩니다. ※ 가상환경 관련 명령어¶ pip list : 가상환경에 설치된 목록을 확인할 수 있다..
[JAVA] 1018번 체스판 다시 칠하기 문제 링크 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 문제 이해 해당 문제는 '완전 탐색' 문제로써, 풀이 시간이 상당히 오래걸렸습니다. for문으로 다뤄야하는 변수 값이 많았기에 실수하지 않는 것이 중요했습니다. 체스판의 경우 8*8의 크기를 가지게 되는데, N,M에 따라서 체스판이 될 수 있는 경우가 다양하기에 모든 경우를 탐색하는 식으로 문제를 풀이했습니다. 코드를 풀이했던 핵심 방법은, 처음에 왼쪽 위 꼭지점 좌표를 for문을 기반으로 정하는 것입니다. 이 때, X좌표의 경우 최대 M-8만..
Python 입출력 ( sys.stdin.readline( ), sys.stdout.write( ) ) 1. input( )대신 sys.stdin.readline( )을 사용하는 이유 - 한 두줄 입력외에 반복문으로 여러줄을 입력 받아야 할 때 input()으로 입력 받는다면 시간초과가 발생 - sys.stdin.readline( )을 활용하여 시간초과를 해결할 수 있습니다. (혹은 PyPy3로 제출 시 해결할 수 있습니다.) - sys.stdin.readline( )의 경우 개행 문자('\n')가 입력 되기에 .strip( ) 등 을 활용해 줄 경우 해결할 수 있습니다. ( rstrip( ) : 오른쪽 공백을 삭제, lstrip( ): 왼쪽 공백을 삭제, strip( ) : 왼쪽, 오른쪽 공백을 삭제 ) - stdin은 우리가 흔히 키보드로 입력하는 행위 뿐만 아니라 파일 등의 넓은 범위의 입력을 의미합..
[JAVA] 1934번 최소공배수 문제링크 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 문제풀이 // 최대공약수 * 최소공배수 = 두 자연수의 곱 // 최소공배수 = 두 자연수의 곱 / 최대 공약수 import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { ArrayList answer = new ArrayList(); BufferedReader br = new Buff..
[Spring Boot] 배치파일을 활용하여 JDK 버전 간편하게 전환 문제 발생) SpringBoot 3.1.0 버전으로 개발을 수행하려고 하였는데, 3.0 부터는 Java 17부터 지원된다고 합니다. 그러다보니 기존에 Java8, 11등을 사용하던 저는 3.x 스프링 부트 프로젝트를 실행할때 에러들을 만나게 되었고 이를 해결하기 위해 JDK 버전을 쉽게 전환하고자 하였습니다. 해결 방안) 여러 JDK를 미리 설치해놓은 후, 버전을 전환하기 위해 다음 글을 참고하였습니다. https://computer-science-student.tistory.com/467 [자바, Java] 설치한 여러 JDK 간편하게 전환 Java 설치한 여러 JDK 간편하게 전환 설치한 여러개의 JDK를 매번 설정을 바꾸지 않고 cmd에서 간단하게 명령어를 입력해 변경해주는 방법에 대해 정리하고자 ..