목록알고리즘 (88)
Hayden's Archive
알고리즘 문제 출처 : https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 내가 작성한 코드 너무 어렵게 생각했다. 큐 하나에서 넣고 빼고를 둘 다 한다는 생각을 못해서 큐 2개를 가지고 씨름을 했다. 또 증감 연산자를 써서 m번째를 추출하고 또 해당 변수를 0으로 초기화하고 또 증감연산자를 쓰고 이렇게 하다 보니 시간 초과가 계속 나왔다. 이럴 땐 이중 for문을 돌리는 게 더 빠르다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOExcept..
알고리즘 문제 출처 : https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 �� www.acmicpc.net 내가 작성한 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.LinkedList; ..
알고리즘 문제 출처 : https://www.acmicpc.net/problem/1406 1406번: 에디터 문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 www.acmicpc.net 내가 작성한 코드 커서를 기준으로 커서 왼쪽은 left 스택, 커서 오른쪽은 right 스택에 쌓는다. 최종 출력할 때 left 스택의 내용물들을 차례대로 꺼내서 append 하고 reverse 한 후에 right 스택의 내용물들을 append 하면 된다. import java.io.BufferedReader; import java.io.BufferedWriter; imp..
알고리즘 문제 출처 : https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 내가 작성한 코드 처음에는 문제가 이해가 되지 않았다. 다시 읽고 이해를 했는데 그러니까 스택에 1,2,3,...,n까지 차례대로 넣을 건데 주어진 숫자가 [4, 3, 6, 8, 7, 5, 2, 1]와 같이 주어졌다면 4를 꺼내기 위해서 1~4까지 스택에 push하고 4가 가장 위에 있을 때 ..
알고리즘 문제 출처 : https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 문제 문장이 주어졌을 때, 단어를 모두 뒤집어서 출력하는 프로그램을 작성하시오. 단, 단어의 순서는 바꿀 수 없다. 단어는 영어 알파벳으로만 이루어져 있다. 입력 첫째 줄에 테스트 케이스의 www.acmicpc.net 내가 작성한 코드 문자를 스택에 push하다가 공백(" ")을 만나면 pop해서 꺼낸다. 마지막 문자열 같은 경우 뒤에 공백이 없는데 그래서 마지막 문자일 경우를 따로 pop해서 꺼낼 수 있도록 조건을 따로 뒀다. Scanner로 하다가 줄 단위로 받는 건 BufferedReader와 BufferedWriter를 사용하는 게 더 좋을 것 같아서 방법을 바꿨다. 또 String ..
알고리즘 문제 출처 : https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 � www.acmicpc.net 내가 작성한 코드 import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Stack stack = new Stack(); Scanner sc = new Scanner(System.in); int num = sc...
관련 포스팅 : https://hayden-archive.tistory.com/199 참고한 코드 : https://bumbums.tistory.com/4 다음 그래프의 시작 꼭지점에서 특정 꼭지점까지의 거리와 경로를 출력해본다. class Dijkstra { private int n; //꼭지점 수를 변수로 선언 private int[][] weight; //2차원 배열 weight에 각 꼭지점의 가중치를 저장 private String[] saveRoute; private String[] vertex = {"a","b","c","d","e","f","g","z"}; public Dijkstra(int n) { super(); this.n = n; //생성자를 통해 꼭지점 수를 주입하고, weight ..
알고리즘 문제 출처 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWVWgkP6sQ0DFAUO&categoryId=AWVWgkP6sQ0DFAUO&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 내가 작성한 코드 큐의 FIFO 성질을 이용해서 큐 5개를 만들면 어렵지 않게 풀 수 있다. import java.util.Scanner; import java.util.LinkedList; import java.util.Queue; import java.io.FileInputStream; cl..
문제) 첫 줄에는 가로와 세로가 주어지고, 둘째줄에는 분할선의 개수가 주어진다. 가로 분할선일 경우 0과 해당 번호가 주어지고, 세로 분할선일 경우 1과 해당 번호가 주어진다. 분할선으로 분할된 영역 중에서 가장 넓은 영역의 넓이를 출력한다. package practice; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int w = sc.nextInt(); //가로 int h = sc.nextInt(); //세로 int[] wArr = new int[w]; int[] hArr = new..
알고리즘 문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12980 코딩테스트 연습 - 점프와 순간 이동 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈� programmers.co.kr 내가 작성한 코드 class Solution { public int solution(int n) { int ans = 0; if(n % 2 == 1) ans = 1; //홀수일 경우 while(n>=1) { n /= 2; //2로 나눈 몫 if(n % 2 == 1) {//몫이 홀수일 때 n -= 1; ans++; ..