본문 바로가기

Backend/코딩연습

(9)
[코딩연습] 최대 자리곱(구름-3단계) - Error(시간초과) 풀이과정 (아래 글과 스크린샷을 참고해주세요.) 풀이의 버젼은 4개로 되어있으며 1~3 버전까지는 readline()으로 읽은 문자열을 정수로 형변환 후 for 반복문을 만들고 다시 개별 숫자를 문자열로 변환하여 charAt()메소드를 활용하는 방식으로 값을 구하였습니다. 4버젼 부터 정수로 형변환 후 사칙연산만을 통해 값을 구하였습니다. 입력정수값 N이 10억(테스트케이스 3번)의 연산시간은 점차 줄어들었으나 결국 해결하지는 못하였습니다. (코드는 아래 [풀이방식 ver1~3 / 풀이방식 ver4]에 작성되었습니다.) 문제를 읽고 예상했던 것보다 훨씬 더 많은 시간을 투입했지만 해결하지 못한 문제입니다. (풀이방법을 아시는분은 공유해주시면 감사하겠습니다. ㅠㅠ) First : 배열 / ArrayList..
[코딩연습] 문자열 번갈아 출력하기 (구름 - Level 3) StringBuffer 풀이과정 1. 입력받은 문자열을 조작하기 위해서 입력문자열에 대한 StringBuffer의 인스턴스 생성 (초기문자열이라 명명) 2. 출력결과는 초기문자열을 기준으로 앞글자와 뒷글자를 차례대로 출력하는 것입니다. 3. 문자열의 양끝에서 한글자씩 안쪽으로 들어가며 출력하는 것보다 양끝만을 출력 하는 것이 더 쉽기 때문에 출력된 문자는 제거합니다. 예) 문자열 출력 abcdef >> af bcde >> afbe cd >> afbecd > 위 작업은 기존 문자열에 문자가 없을 때까지 지속합니다. 4. 문자의 갯수가 홀수일 경우 앞글자를 삭제한 뒤 삭제할 뒷글자가 없기 때문에 앞글자를 삭제한 후 문자가 없을 시 반복을 끝낼 수 있도록 처리합니다. - 저장한 문자열을 수정할 수 없는 String 클래스와 달리 메..
[코딩연습] 특정 구간의 합 - (구름-3단계) 풀이과정 1. 총 세번에 걸쳐서 입력을 받음 용도에 따라 정수형, 문자열배열, 문자열 변수 선언 및 저장 2. 산술연산을 위해 문자형 배열을 정수형배열로 변경 3. 주어진 범위에 따라 정수형 배열의 요소값을 더하여 준다. 합을 위한 구간 입력값을 처리하는데 생각외로 어려움을 겪음. 문자열로 받은 뒤 첫번째와 세번째 문자를 이용해서 합계범위를 구하려는 계획 구상 계속 인덱스범위를 에러가 발생하였고 이유를 확인해보니 charAt(int index)로 구한 값을 엉뚱하게 처리하였다. charAt() 메소드의 return 값은 char 형이지만 아무생각 없이 for문의 int i 의 초기값 및 비교조건값으로 설정 char형 자료가 포함된 산술연산을 할 때, 형 변화를 고려하여 의도한 결과가 나오도록 코드작성 I..
[코딩연습] 여름의 대삼각형 (구름 - 1단계) 풀이과정 0. BufferedReader 를 통해 읽어지는 문자열 라인들을 공백을 기준으로 쪼개어 배열로 반환 -> String 클래스의 인스턴스 매소드 split()의 반환형은 String[] -> 연산을 위해 처리된 배열의 요소값들을 실수형으로 형변환 1. 입력은 총 3번 이루어지며 a b, c d, e f를 입력했다고 가정했을 경우 2차원배열은 다음과 같은 형태를 지닌다. {{a, b}, {c, d}, {e, f}} 2. 실수화 처리된 요소들을 삼각형의 넓이를 구하는 공식에 대입하여 풀이. 3. 구해진 넓이를 출력조건에 맞추어 변경후 출력 ------------------------------------------------------------------------------------------..
[코딩연습]태민이의 취미 (구름-1단계) [통과x] 풀이과정 0. 1부터 n까지 정수들의 세제곱 합 sum = {n*(n+1)/2}^2 : 1~n 까지 정수들의 합을 제곱하면 나온다. 1. sum (1~n 까지의 합)을 구한 뒤 제곱하여 1000000007로 나눈 나머지를 출력. ----------------------------------------------------------------------------------------------------------------------------------- import java.io.*; class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputS..
고장난 컴퓨터 - level 1(구름, Java) 해당 문제를 풀때는 Main클래스 외부에 다른 클래스를 만들어서 최대한 객체지향프로그래밍언어스럽게 풀려는 노력을 했습니다. 문제풀이 0. 문제해결을 위한 메소드를 가지는 클래스를 선언 (글자입력과 관련되었기 때문에 Typing으로 명명) 1. 어떻게 해결해야할 지 막막했지만 우선 입력받은 값의 자료형을 문자열에서 정수형으로 변환시켜야했기 때문에 관련 메소드를 우선적으로 작성. 2. readLine()으로 읽은 문자열에서 공백이 숫자들을 구분하고 있음. 다수의 자료를 한번에 처리 -> 배열, For-Loop 활용 Integer.parseInt(String str)을 참조하여 메소드 식별자의 이름을 parseIntArr로 표기 3. 두번째 라인에서 받은 숫자들은 코딩을 시작한 후부터(기준점) 입력을 할때마다..
[코딩연습] 시험성적 평균과 등급 구하기 (구름-1단계) import java.io.*; class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); 해당문제는 평소처럼 BufferedReader클래스를 활용하여 받은 데이터를 문자열 변수 input에 저장한 코드가 초기값으로 주어져 있습니다. 풀이과정 0. readline은 입력된 줄을 문자열로 return하는 함수. -> 입력된 점수는 공란 (스페이스)으로 구분되어 있음. 1. split() 메서드를 통해 문자열을 공란을 기준으로 쪼개어 배열에 저장. Stri..
[코딩연습] 369 게임 (구름 - 1단계) 처음에는 '3,6,9'라는 게임이 숫자를 취급하기 때문에 문자열로 저장되는 입력값을 정수형으로 형변환 후 for문을 통해서 쉽게 답을 구할 수 있을 것이라 판단했습니다. [ First Try ] 0. 예제로 십의 자리 숫자 10과 35가 나왔기 때문에 해당 조건만 생각 1. 정수는 10의 제곱들의 합으로 표현가능 예) 35 = 3*10^1 + 5*10^0 2. 숫자 1~입력된숫자 범위에서 각 숫자를 10으로 나누었을 때 그 몫과 나머지가 3,6,9인 경우를 계산하여 count하는 로직을 작성. 하지만 위처럼 계산하면 숫자가 100을 넘어갈 때 의도한 결과가 나오지 않습니다. 덕분에 4,5번 테스트에서 통과할 수 없었고 100 or 그 이상의 숫자들을 계산하기 위해서는 조건들이 다양해지고 코드역시 복잡해졌..