Coding Test/JAVA 코테(구) 10

프로그래머스 스쿨(Java - Lv.0) - 연속된 수의 합

문제 풀이를 위해 알아야 할 것 전체숫자를 만드는 연속된 수는 전체 숫자를 개수로 평균 낸 후 그 수를 중심으로 좌우에 같은 수를 배치하여 문제를 푼다. 방식은 전체수가 홀수일때, 짝수일때를 구분해준다 해답 class Solution { public int[] solution(int num, int total) { if(num%2==0){ // 짝수개로 int[] answer = new int[num]; int start = total/num - num/2+1; for(int i=0; i

프로그래머스 스쿨(Java - Lv.0) - 삼각형의 완성조건 (2) - 수학적조건 따지기

문제 풀이를 위해 알아야 할 것 세변이 존재할때 삼각형이 성립할 조건은 세변중 가장 긴변이 나머지 두변의 합보다 작아야한다 해답 class Solution { public int solution(int[] sides) { int otherSide =0; int longSide =0; int shortSide =0; if(sides[0]>=sides[1]){ // 두변중 긴변이 무엇인지 구분한다 longSide = sides[0]; shortSide = sides[1]; } else{ longSide = sides[1]; shortSide = sides[0]; } int answer=0; // 가장 긴변이 내가 정한 수일 경우(이등변 포함) otherSide = longSide; while(otherSide

프로그래머스 스쿨(Java - Lv.0) - 다항식 더하기 (예외처리 꼼꼼하게 하기)

문제 다항식이 String으로 받았을때, 그 String문내에서 다항식의 덧셈이 작동하도록 만들어야한다. 생각 해야 할것 1.문자가 있는항과 문자가 없는 상수항을 나누어 생각한다. x의 계수끼리 더하고 상수항 끼리 더해야하겠다. 1-1 "x" 와 동일한 문자열을 받았을때 1-2 가장 뒷자리에 "x"가 있는 문자열을 받았을때 1-3 "x"가 들어이있지않는 2. 출력할때 없는 것이 존재한다면 그 경우를 나누어야 한다. 2-1 상수항이 0일때 2-1-1 상수항이 0이고 x계수도 0 2-1-2 상수항이 0이고 x계수가 1 2-1-2 상수항이 0이고 x계수가 1보다 클때 2-2 상수항이 0이 아닐때 2-2-1 상수항이 0이 아니고 x계수가 0일때 2-2-2 상수항이 0이 아니고 x계수가 1일때 2-2-3 상수항이..

프로그래머스 스쿨(Java - Lv.1) - 크기가 작은 부분문자열(String 타입의 숫자 비교)

문제 TRY1 - Substring 이후 Integer.parseInt를 이용한다. class Solution { public int solution(String t, String p) { int answer = 0; for(int i=0;i=tempInt){answer++;} } return answer; } } 문자열을 잘라 Int값으로 변형하여 크기를 비교한다. 이것은 당연한 이야기가 되겠지만, 우리는 그렇다면 이 문제가 왜 레벨1인지 간과한 것이다. int의 자리수는 아무리커도 18자리면 불가능한것이 당연 해답 class Solution { public int solution(String t, String p) { int answer = 0; for(int i=0;i=0){answer++;} } ..

프로그래머스 스쿨(Java - Lv.1) - 이상한 문자 만들기 (공백의 개수가 정해지지 않은 경우)

문제 TRY1 아무생각없이 전체를 SPLIT하여 짝수번째 인덱스는 대문자, 홀수번째 인덱스는 소문자로 치환했다. 의외로 주어진 케이스는 통과가 되었으나.. 실제 채점에서는 대부분이 오답이 되었다. 1차적인 오답예시 "hihi hihi" > 말한대로 처리할 경우 "HiHi hIhI" 와 같이 두번째 문자열이 안맞게 되어 오류가 발생한다. TRY2 이번엔 공백을 순서에 넣지않고자 1. 문자열.split(" "); 을 이용하여 문자들만 가져온다. 2. 가져온 문자열을 TRY1과 같이 각자 대문자 변환을 해준다. 그리고 그 문자열들을 Que에 저장한뒤 Que의 사이즈가 0이 될때까지 문자열을 붙이고 띄어쓰기를 붙이다가 마지막엔 문자열만 붙여 마무리한다. TRY2가 맞는 예시 "hello there" > "Hel..

프로그래머스 스쿨(Java - Lv.1) - 공원 산책 (좌표계에서 움직이기)

문제 제한사항 로봇이 X를 만나거나, 공원을 벗어나면 그 입력은 무시하라는게 이 문제의 포인트이다. 순서대로 보는 해결 방법 1번 우선 공원의 길이와 로봇의 위치를 변수로 선언한다. 문제에서는 park가 1차원String 배열로 주어져있는데 우리는 이것을 2차원 String배열로 한글자씩 담는 String을 선언하여 쓴다. 여기에서는 parkCo라는 변수에 담겠다. int parkH =park.length; int parkW =park[0].length(); int robotH =0; int robotW =0; String[][] parkCo = new String[parkH][parkW]; for(int i=0; i

구슬을 나누는 경우의 수(Int 범위를 넘어가는 수 처리하기)

문제를 읽어보면 우리가 고등학교 1학년때 배우는 Combination과 연산이 다르지 않다. 그래서 당연하게도 for문을 이용하여 팩토리얼 연산을 하여 계산을 하려고했다. class Solution { public int solution(int balls, int share) { int answer = 0; int fact1= 1; int fact2= 1; int fact3= 1; if(balls==1 || balls==share){answer = 1; return answer;} if(share==1){return balls;} for(int i=balls-share+1; i

2차원 배열에 정수를 나선형으로 배치하기

IDEA 우선적으로 배열내에서의 움직임을 파악한다. 이동은 오른쪽 아래 왼쪽 위 순으로 진행되며, 시작하는수와 끝나는수를 좌우 이동과 위아래 이동에서 각각 변수로 둔다. 그리고 이동하는 것을 숫자로 생각하여 switch문으로 아래처럼 작성해두었다. 제일중요한것은 오른쪽으로 진행을 하면 가장 윗줄이 모두 사용되었기때문에 위아래이동 중에서도 시작하는 수에서 이제는 0번 인덱스를 더이상 사용할 수 없으므로 오른쪽으로 이동후 위아래 최소인덱스를 하나 증가시켰다. 이런식의 이동을 4가지 방향에대해 모두 만든 후 끝 인덱스에 닿을때까지 번호를 1개씩 증가시키며 대입 후 끝 인덱스에 닿았을때 way변수의 숫자를 바꾸어 다른 switch 실행문으로 이동시켜 이것을 반복시켜 규칙적으로 진행할 수 있도록 하였다. clas..