전체 글

문제 풀이 import java.util.Scanner; class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(), M = sc.nextInt(); int[][] map = new int[N][M]; for(int i = 0; i < N; i++) { for(int j = 0; j < M; j++) map[i][j] = sc.nextInt(); } int T = sc.nextInt(); while(T != 0) { int x1 = sc.nextInt(), y1 = sc.nextInt(), x2 = sc.nextInt(), y2 = sc.nextInt(), sum =..
문제 풀이 문제에 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 문제이기 때문에 단순히 최소 공배수로 구하면 오답이 된다. 예를 들어 18라고 가정하면 2,3,6,9 가 되고 그 외의 입력은 들어올 수가 없다. 이 부분만 알고있다면 구현은 쉽게 할 수 있다. import java.io.*; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int X = Integer.parseInt(br.readLine()); ..
1주차 미션 정리 - 이 글은 프로그래머스 - 쉽게 구현해보는 자바 애플리케이션 스터디를 참여하며 쓴 글입니다. - 1주차의 미션은 문자열 계산기(우선순위 적용)와 숫자 야구 게임을 구현하는 내용이었습니다. 문자열 계산기를 통해 배운점 1. 매직넘버를 의미 있는 단어로 public void hasPriority() { for (int i = 0; i < formula.size(); i++) { if (formula.get(i).equals("*") || formula.get(i).equals("/")) { public static final String MULTIPLY_OPERATOR = "*"; public static final String DIVIDE_OPERATOR = "/"; public voi..
문제 풀이 스트림을 사용해서 LongStream에 rangeClosed메서드는 첫 번째 파라미터부터 두 번째 파라미터의 수까지 생성할 수 있다. Math.min, Math.max메서드를 이용해서 작은 값과 큰 값을 넣어준 뒤 sum메서드로 더 해 반환하면 된다. import java.util.stream.LongStream; class Solution { public long solution(int a, int b) { return LongStream.rangeClosed(Math.min(a,b),Math.max(a,b)).sum(); } }
문제 풀이 각 자릿수의 합을 구해서 x가 자릿수들의 합으로 나눠진다면 true를 리턴하면 되는 간단한 문제다. 스트림을 이용해서 풀어보았는데 x를 문자열로 바꿔준뒤 각 자리를 나눠줬고 그 뒤에 mapToInt메서드를 이용해 다시 int형으로 바꾸면서 더해주었다. 그리고 x를 더해준 값으로 나눠주고 나머지가 0이라면 true를 반환하게 하였다. import java.util.Arrays; class Solution { public boolean solution(int x) { int value = Arrays.stream(String.valueOf(x).split("")).mapToInt(Integer::parseInt).sum(); return x%value==0; } }
문제 풀이 입력받은 n을 toString메서드를 이용해 String으로 바꿔주고 for문으로 문자열의 뒷자리는 앞으로 넣어주는 반복을 해준다. class Solution { public int[] solution(long n) { String str = Long.toString(n); int[] answer = new int[str.length()]; for (int i = 0,j = str.length()-1; i < str.length(); i++,j--) { answer[j] = Integer.parseInt(String.valueOf(str.charAt(i))); } return answer; } }
문제 풀이 배열을 인수로 받아서 평균을 구하는 문제이다. 이 문제도 스트림으로 풀어보려 하는데 배열을 스트림으로 만들기 위해 Arrays.stream을 이용해서 스트림을 만들 수 있다. 스트림으로 만든 뒤 IntStream에 average메서드를 이용해 평균을 구한다. 그리고 배열이 비어 있는 경우를 대비해 orElse(0)을 넣어줘 비어있다면 0을 리턴하게 하였다. import java.util.Arrays; class Solution { public Double solution(int[] arr) { return Arrays.stream(arr).average().orElse(0); } }
문제 풀이 이 문제도 스트림으로 풀어보고 싶었지만 생각나지 않아 외부 구현으로 구현해보았다. 파라미터로 받은 수의 제곱근을 구하고 int형으로 형 변환해준 뒤 다시 제곱을 했을 때 파라미터로 받은 수와 비교해서 같다면 제곱근의 +1의 제곱을 반환하고 아니라면 -1을 반환하게 하였다. class Solution { public static long solution(long n) { if(Math.pow((int)Math.sqrt(n),2)==n){ return (long) Math.pow((Math.sqrt(n)+1),2); }else{ return -1; } } }
E@st
학습 기록