1. 문제 2. 문제 해결 논리 1. 문제 이해 주어진 것 String s //주어진 알파벳 문자열 int n //밀어낼 수 요구되는 것 n만큼 밀어내고 난 문자열 2. 데이터 구조 결정 StringBuilder, 반복문, Character 클래스 사용 3. 알고리즘 설계 반복문을 통해서 주어진 문자열을 하나씩 순회 조건문에 넣을 조건으로 Character 클래스의 isLowerCase, isUpperCase 메서드 사용 StringBuilder에 추가 및 String으로의 변환 3. 코드 구현 class Solution { public String solution(String s, int n) { StringBuilder result = new StringBuilder(); //문자열 s을 하나씩 순회..
1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 int n // 10진법으로 주어진 수 요구되는 것 int answer // 3진법으로 바꾸고 역순 정렬 후, 10진법으로 변환한 수 데이터 구조 결정 String, Integer, StringBuilder 클래스의 메서드 사용 StringBuilder와 반복문을 사용 알고리즘 설계 String, Integer, StringBuilder 클래스의 메서드 Integer.toString을 이용한 10진법 -> n진법 변환 StringBuilder를 이용한 역순 정렬 Integer.parseInt를 이용한 n진법 -> 10진법 변환 StringBuilder와 반복문 3. 코드 구현 3-1. String, Integer, StringBuilder 클래스 cl..
1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 int n, int m //임의의 두 자연수 요구되는 것 두 수의 최대공약수(GCD) 최소공배수(LCM) 데이터 구조 결정 유클리드 호제법 기본 원리 두 수의 GCD(최대공약수, Greatest Common Divisor)를 찾는 알고리즘 두 양의 정수 a와 b(a > b)가 주어졌을 때, a를 b로 나눈 나머지 r과 b의 GCD는 같다 얻어진 b와 r(b > r)로 b를 r로 나누면 나머지 r2와 r의 GCD는 같다 이와 같은 작업을 반복하여 나머지가 0이 되는 시점에서 나누는 수가 GCD 방법 1. 반복문 사용 방법 2. 재귀 호출 사용 코드가 간결하고 이해하기 쉬움 재귀 호출 횟수가 매우 많아지면 스택 오버플로우가 발생할 가능성이 있음 방법 3...
1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 arr1, arr2 //행과 열의 크기가 같은 임의의 배열 요구되는 것 answer //arr1과 arr2의 각 원소를 더한 배열 데이터 구조 결정 방법 1. 이중 for문 사용 for문을 사용하기 적합한 상황 인덱스에 접근할 필요가 있을 때 (== 순서에 의존하는 작업을 할 때) 요소를 수정하거나 제어해야할 때 코드가 길어지면 가독성이 떨어질 수 있음 요소를 순회하고 값을 읽는 작업, 특정 순서를 따르는 작업에 좋음 방법 2. for - each문 사용 for - each문을 사용하기 적합한 상황 인덱스에 접근할 필요가 없을 때 (== 순서에 의존하지 않는 작업을 할 때) 순회 작업이 간단할 때 간결하고 가독성이 좋음 요소를 순회하고 값을 읽는 작업..
1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 String s //임의의 정렬할 문자열 요구되는 것 String answer //내림차순 정렬된 문자열 데이터 구조 결정 StringBuilder 사용 문자열을 동적으로 생성 및 수정할 때 유용한 클래스 StringBuilder의 주요 메소드 append() : 문자열 뒤에 추가 insert() : 지정된 위치에 삽입 delete() : 지정된 시작과 끝 인덱스 사이의 문자열 삭제 replace() : 지정된 시작과 끝 인덱스 사이의 문자열을 다른 값으로 대체 reverse() : 문자열을 거꾸로 뒤집기 toString() : StringBuilder 객체를 String 객체로 변환하여 반환 방법 1. 정렬 메소드 사용 Arrays.sort(정렬 대..
1. 문제 2. 문제 해결 논리 1. 문제 이해 주어진 것 int n //반복할 횟수 요구되는 것 String //수, 박을 반복하는 문자열 2. 데이터 구조 결정 StringBuilder 사용 문자열을 동적으로 생성하고 수정할 때 유용한 클래스 String은 수정 불가하므로 문자열을 수정할 때마다 새로운 객체가 생성됨. 따라서 메모리 낭비와 성능 저하 StringBuilder의 주요 메소드 append() : 문자열 뒤에 추가 insert() : 지정된 위치에 삽입 delete() : 지정된 시작과 끝 인덱스 사이의 문자열 삭제 replace() : 지정된 시작과 끝 인덱스 사이의 문자열을 다른 값으로 대체 reverse() : 문자열을 거꾸로 뒤집기 toString() : StringBuilder 객..
1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 String[] id_list //유저 Id 배열 String[] report //신고 정보(신고자, 피 신고자) 배열 int k // 정지 기준 신고 횟수 요구되는 것 int[] //각 유저 별 신고 처리 메일 발송 횟수 배열 데이터 구조 결정 Map 구조 사용 키-값 저장 : 각 유저 별(Key) 유저 정보(Value, 피 신고 횟수 or 신고자 목록) -> Map 사용 빠른 조회 속도 : HashMap(해시 함수 이용) -> 조회 속도 빠름 유연한 사이즈 : Map은 동적으로 크기 조절 가능 -> 유저의 수가 변동될 때에도 구조 유지 가능 알고리즘 설계 각 유저 별 유저 정보를 위한 Map 생성 각 유저 Id와 인덱스를 저장할 Map1 생성 피 ..