생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q7728.java 숫자가 주어진다 얼마나 다양한 숫자로 이루어져있는지 개수를 출력하여라. 처음 생각문자열로 주어지는 숫자의 각 자리수를 다룰수 있는지를 보는 문제인것 같다. 다음 생각문자열의 각자리를 charAt을 통해 읽으면서 해당 값은 아스키코드이므로 '0'을 빼주어 원래 숫자를 얻을 수 있도록 하였다.▶ 해당 숫자가 이미 사용된 숫자인지를 파악하기위해서 int[10] 즉, 0~9까지 체크할 수 있는 배열을 만들어 문자열에서 해당 숫자가 이미 사용되어있는지를 체크해주었다.▶ 이경우 숫자의 체크를 위해 배열값을 바꿔주어야하는데 배열을 매번 초기화하면 배열이 클경우 효율이 떨..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q7732.java 시작 시간과 끝나는 시간의 시간차를 xx:xx:xx 형식으로 나타내어라. 처음 생각처음에는 문자열을 어떻게 분리 시킬까를 생각해보았다. 입력이 정해진 형식으로 들어오기때문에 Index로 접근해도 괜찮지만 String Class의 split 사용하면 좀 더 편하게 시:분:초를 분리시킬 수 있다.▶ split(":")을 사용하면 :로 문자열을 분리해준뒤 해당값을 배열로 return 해준다. 다음 생각그 다음으로는 시간차를 출력하는 것이므로 분리된 시, 분, 초를 각 단위에 맞게 [끝나는 시간 - 처음 시간]으로 계산을 해주었다.▶ 이렇게 끝나는 시간 - 처음 시..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d4/Q6959.java 양수가 주어진다. 예를들어 1234가 주어지면 연달아 있는 두개의 숫자를 선택한다. 23을 선택했으면 154로 만들 수 있고, 34를 선택했으면 127을 만들 수 있다. 이런식으로 두사람이 숫자를 더해주면서 번갈아 게임을 진행했을 때 1자리 숫자가 남게되면 그 차례 사람이 진다. 이긴 사람을 출력하여라. 처음 생각다양한 풀이가 있을것 같다는 생각이든다. A,B 엘리스와 토끼가 번갈아가면서 게임을 진행하고 최선을 다해 게임에 임한다고 한다.▶ 최선을 다하든 최선을 다하지 않고 게임에 임하든 한 자리가 될 때까지 게임의 진행 횟수는 같다. 다음 생각그래서 처음에..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d5/Q6782.java 2이상의 정수 N이 주어진다. N은 다음 2개의 규칙으로 바꿀 수 있다. 1) sqrt(N)이 정수라면 N을 sqrt(N)으로 바꿀 수 있다. 2) 그렇지 않다면 N을 N+1로 바꿀 수 있다. 처음 생각처음엔 생각나는데로 풀이를 시작했다. 규칙대로 루트 N 값이 정수라면 N을 루트 N으로 바꿔주고, 그렇지 않다면 1씩 증가시켜주었다.▶ N이 최대 10^12으로 숫자가 상당히 커서 시간 초과가 났다.▶ 루트 N이 정수인지 확인한 방법은 간단하게 다음과 같이 확인하였다. 12double t = Math.sqrt(n);if((int)t == t) {} ▶ Java..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d4/Q6731.java 오델로의 판이 주어진다. 한 칸을 선택하면 해당 칸의 가로줄 세로줄이 모두 뒤집힌다. 초기 상태(모두 흰색)로 만들 경우 뒤집어야하는 최소 칸수를 선택하여라. 처음 생각몇 몇 질문들을 보면서 글을 작성해본다.문제를 보면 우선적으로 드는 생각은 DFS를 이용하는 방법이다. 조합을 만들거나 DFS를 통해 검은돌이나 흰돌을 선택해 나가면서 진행을 하고자하는 생각이 무럭무럭 든다.▶ 하지만 배열이 최대 1000*1000 이다. 따라서 모든 경우를 따져주기에는 시간이 많이 부족하다. 조합을 만들어 주는 경우도 몇 십개만 되도 많은 시간이 걸리므로 모든 경우를 따져주는..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d4/Q3752.java 시험 점수가 주어진다. 해당 점수들을 가지고 가능한 시험점수들의 개수를 출력하여라. 모든 점수를 선택하지 않은 0점도 시험점수이다. 처음 생각SW Expert의 D3 몇 개 부터 최적화를 상관안하고 풀면 못푸는 문제들이 나오기 시작한다.▶ 글쓴이는 그런걸 잘 못합니다! ▶ 최근 DP에 관한 기초적인 문제를 풀지 못해서 기초 DP 문제들을 풀어보면서 익혀보고 있었는데 마침 문제를 둘러보다가 DP로 풀면 될것 같아서 풀어보았다. 다음 생각주어진 시험 점수를 가지고 가능한 시험점수들을 모두 만들어주어야한다. 일반적인 접근을 했다면 모든 조합을 만들어주어서 점수들을..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q6019.java 기차 A,B가 A,B의 속력으로 서로를 향해 달리고 있으며, 파리가 A기차 시작점에있다. D A B F가 주어진다. D는 기차 사이의 거리 A는 A기차의 속력 B는 B기차의 속력 F는 그 사이에 있는 파리의 속력이다. A 기차에서 출발한 파리는 B기차에 닿을 때까지 F의 속력으로 이동한 후, 다시 A기차를 향해 날아간다. 그리고 A 기차에 닿으면 다시 B기차를 향해 날아간다. A,B 기차가 만나서 파리가 죽을 때까지 파리가 이동한 거리를 구하여라. 처음 생각파리가 죽는다니! 끔찍한 문제지만 문제를 간단하게 생각하면 끔찍하지만은 않은 문제다.▶ 수학적인 접근을..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q5789.java n개의 상자에대해서 q개의 작업을 준다. q개의 작업은 L R로 주어지며 1번째 작업일 경우 L부터 R까지 번째의 상자를 1번으로 3번째 작업일 경우는 L부터 R까지 번째의 상자를 3번으로 바꾼다. 최종 작업이 끝났을 때 상자의 상태를 출력하여라. 처음 생각특정 구간에대해 주기적으로 상태를 바꿔주어야한다. Python으로 풀면 굉장히 쉽게 풀 수 있다. 하지만 일단 Java로 접근을 해보자. 다음 생각크기가 n인 배열을 선언해준 뒤, q개의 작업을 받아 반복문의 범위를 L-1
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q5948.java 7개의 숫자가 주어질 때 3개의 수를 더하여 만들 수 있는 수중 5번째로 큰 수를 출력하여라. 중복 숫자는 1개로 친다. 처음 생각중복을 없앨 생각으로 Set 자료 구조를 생각하였다. Set은 중복을 불허하는 자료구조이다. Set에 담긴 자료들을 정렬하기 위해 List로 바꿔주기 위해 List도 선언해 주었다. 다음 생각7개중 3개의 숫자 조합이므로 반복문 변수 j,k,z를 사용하였다.▶ k의 경우는 j+1 부터 시작을, z의 경우는 k+1부터 시작을 하게 하였다.▶ 이럴경우 중복된 숫자가 골라지지는 않겠지만 더했을 경우 같은 숫자들이 나올 수 있으므로 Se..
생각Github - https://github.com/hellojdh/Code/blob/master/src/swexpert/d3/Q6190.java n개의 수가 주어진다. 두 수를 곱한수가 단조 증가하는 수인 경우 그 최대값을 출력하여라. 단조 증가하는 수가 없다면 -1을 출력하여라. 단조 증가하는 수란 111122345 처럼 계속해서 증가하는 수다 1111144442, 12345675같은 수는 단조 증가하는 수가 아니다. 처음 생각조합을 짜야하나 생각했지만 2개의 수만 곱하면 되므로 2중 반복문을 통해서 배열에 저장해둔 수들을 곱해주었다.▶ 2중 반복문 구현시 각각의 변수를 i,j라 한다면 중복된 경우를 피하기 위해 j의 시작은 i+1부터 시작해 주면된다. ▶ 예를들어 1 2 3 4 가 주어졌다면 1*..
- Total
- Today
- Yesterday