Computer Science/Problem Solving (PS)(38)
-
[BOJ_11586 | Array] 지영 공주님의 마법 거울
풀이 사실 문제 자체는 굉장히 간단했다.배열의 크기와 배열의 내용이 주어지면 그 내용을 입력받고공주님의 심리를 나타내는 control signal의 숫자에 따라 배열의 내용을 뒤바꾸기만 하면 되는 것이다. 문제 해결은 다음과 같이 이루어진다.1. 주어진 배열을 저장한다. (character Array)2. 주어진 심리 상태에 따라 배열을 각기 다른 방법으로 출력하면 된다. 심리상태가 1일 경우 입력받은 그대로 출력하면 되고2일 경우, 열의 번호를 역순으로 출력하면 되고3일 경우 행의 번호를 역순으로 출력하면 된다. 다만, 메인 함수 자체가 복잡해지는 것을 막기 위해 각각의 기능을 수행하는 static 함수를 새로 구현했고이 문제 상에서는 출력만 하면 되지만, 특정한 경우 반전된 데이터를 바탕으로 새로운 ..
2019.01.07 -
[BOJ_11650 | compareTo] 좌표 정렬하기
문제 풀이 문제 자체는 그렇게 어렵지 않았으나, compareTo 메소드를 구현하여Arrays.sort 를 사용하면 간단하게 해결할 수 있는 문제였다. 따로 Merge Sort, Quick Sort 등을 구현하기 귀찮았다면Object 객체를 하나 선언하고Comparable Class를 구현하여 기준만 제대로 할당해 준다면굉장히 간단하게 문제를 해결할 수 있었다. 간단한 설명을 덧붙이자면x좌표가 비교하고자 하는 객체의 x좌표보다 작으면 -1, 크면 1을 리턴하고같은 경우에 y좌표를 비교하여 리턴값을 -1, 1로 설정해주면간단하게 구현이 가능하다. 소스 코드 1234567891011121314151617181920212223242526272829303132import java.util.*;public cla..
2019.01.05 -
[BOJ_1181 | compareTo] 단어 정렬
풀이 compareTo Method를 구현하면 Java.util.Arrays에 들어있는 sort 메소드를 사용하여 쉽게 정렬이 가능한 문제였다.token이라는 클래스를 선언하고 이 클래스는 String을 변수로 갖는다. token을 정렬할때의 기준을 세워주기 위해 compareTo 메소드를 구현했는데비교해야 할 두 개의 스트링의 길이가 다른 경우에는 짧은 스트링이 앞에 오도록 기준을 세워주면 되고 스트링의 길이가 같은 경우에는String내부에 있는 compareTo 메소드를 호출하였다.(String내부에 있는 compareTo 메소드는 스트링을 사전순으로 정렬해준다.) 자바에서는 Sort함수를 제공하고 이 함수는데이터의 개수와 여러 조건들에 따라서 가장 효율적인 정렬 알고리즘을 사용하기 때문에 시간복잡도..
2019.01.03 -
[BOJ_3474 | Number Theory] 교수가 된 현우
풀이 문제 자체는 크게 어려운 문제는 아니었던것 같다.하지만, 풀이 과정에 따라서 시간 복잡도가 천차만별이 될 수 있다는 것을3번의 실패끝에 경험했다. 몇 자리수인지를 물어보는 것이 아니라 뒷자리에 0이 몇개가 있는지를 계산하는 문제였기 때문에비교적 간단하게 2 와 5의 개수만으로 답을 구할 수 있다. 단 이때 참고해도 될 만한 부분은 1. 2의 개수는 무조건 5의 개수보다 많으므로 굳이 2의 개수를 세느라 시간을 낭비할 필요가 없다 2. 1~N 사이의 2나 5의 배수를 탐색하는 과정에서 모든 숫자를 탐색할 필요가 없다 이 2가지 정도로 정리할 수 있겠다. 2번을 몰랐던 상황에서 1024!의 값을 구하기 위해1~1024 까지의 모든 자연수의 2, 5의 배수개수를 세고 있었고결과적으로 시간 복잡도가 증가하..
2019.01.02 -
[BOJ_4963 | DFS] 섬의 개수
풀이 전형적인 DFS문제로 보여진다.뭔가 다른 방법이 있진 않을까 해서 DFS를 사용하지 않고 풀려고도 시도해 보았지만아무래도 DFS로 문제를 해결하는 것이 더 간단해보인다. DFS란 Depth-First Search 의 약자로하나의 경로를 우선적으로 끝까지 탐색하는 알고리즘이다. 위 문제를 해결하기 위해서 1로 연결되는 경로를 DFS로 탐색하면서 그 값을 다 2로 바꾸어 준다.그럼 하나의 점에서 시작된 DFS결과는 상하좌우 대각선으로 연결된 하나의 섬을 전부 2로 바꾼 결과가 되고 아직 2로 바뀌지 않은 지점은 연결되지 않은 섬이므로 카운터의 값을 증가시킨뒤에 다시 DFS를 수행하는 방식이다.DFS에 익숙하지 않다면 이 문제를 통해 한번 연습해보는 것이 좋을 듯 하다. 크게 어렵지 않은 난이도로 DFS..
2019.01.02 -
[BOJ_6378 | while] 디지털 루트
while문의 사용에 익숙해져 있다면 해결하는데 큰 어려움을 겪지 않았을 문제였던 것 같다.스트링으로 인풋을 입력받는데0이면 인풋받는 while문을 빠져나오고스트링을 캐릭터로 파싱해서 다 더해주는 단계를 밟았다. 다 더한 Integer값이 10미만이면 바로 출력하고10보다 크다면 그때부터는 Integer를 다루는 digitalRoot함수에 집어넣어 문제를 해결하였다. 1234567891011121314151617181920212223import java.util.*;public class BOJ_6378 { public static void main(String[] args){ Scanner input = new Scanner(System.in); while(true) { String num = inpu..
2019.01.02