알고리즘

PS/Programmers

[level1, for문] 콜라 문제

class Solution { public int solution(int a, int b, int n) { int result = 0; //빈 병 a개마다 꽉 찬 병 b개를 돌려줌 //1회차 빈 병 20개 -> 꽉 찬 병 10개 //2회차 빈 병 10개 -> 꽉 찬 병 5개 //3회차 빈 병 4+1개 -> 꽉 찬 병 2개 //4회차 빈 병 2+1개 -> 꽉 찬 병 1개 //5회차 빈 병 1+1개 -> 꽉 찬 병 1개 //5회차 빈 병의 개수가 a와 같거나 작으면 반복 종료 //빈 병 저장할 변수 int emptyBottle = 0; while ((n / a) * b > 0) { result += (n / a) * b; if (n % a < a) { emptyBottle += (n % a); } n = (..

PS/Programmers

[level1, HashMap] 달리기 경주

1. 문제 2. 문제 해결 논리 1. 문제 이해 데이터 구조 결정 HashMap 이용 선수(players 배열의 원소)와 등수(players 배열 각 원소의 인덱스) 저장 2. 알고리즘 설계 HashMap을 players 배열로 초기화 callings 배열 순회 HashMap에서 player의 등수 추출 버블 정렬을 이용하여 players 배열 갱신 HashMap 등수 갱신 3. 코드 구현 import java.util.*; class Solution { public String[] solution(String[] players, String[] callings) { //1. HashMap으로 초기화 HashMap rankMap = new HashMap(); for (int i = 0; i < playe..

PS/Programmers

[level1, Character] 시저 암호

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을 하나씩 순회..

PS/Programmers

[level1, 진법] 3진법 뒤집기

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..

PS/Programmers

[level1, Stack/Queue] 같은 숫자는 싫어

1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 int[] arr //0보다 크거나 같고 9보다 작거나 같은 정수를 원소로 하는 배열 요구되는 것 int[] answer //중복된 원소만 제거된 배열 데이터 구조 결정 방법 1. List, ArrayList 구조 사용 Collection 인터페이스를 구현하고 있는 List 인터페이스의 사용 List 인터페이스의 주요 메서드 add(E element) -> 반환 값 boolean get(int index) -> 반환 값 E element isEmpty() -> 반환 값 boolean size() -> 반환 값 int sort(Comparator

PS/Programmers

[level1, 유클리드 호제법] 최대공약수와 최소공배수

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...

PS/Programmers

[level1, sort] 문자열 내림차순으로 배치하기

1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 String s //임의의 정렬할 문자열 요구되는 것 String answer //내림차순 정렬된 문자열 데이터 구조 결정 StringBuilder 사용 문자열을 동적으로 생성 및 수정할 때 유용한 클래스 StringBuilder의 주요 메소드 append() : 문자열 뒤에 추가 insert() : 지정된 위치에 삽입 delete() : 지정된 시작과 끝 인덱스 사이의 문자열 삭제 replace() : 지정된 시작과 끝 인덱스 사이의 문자열을 다른 값으로 대체 reverse() : 문자열을 거꾸로 뒤집기 toString() : StringBuilder 객체를 String 객체로 변환하여 반환 방법 1. 정렬 메소드 사용 Arrays.sort(정렬 대..

PS/Programmers

[level1, StringBuilder] 수박수박수박수?

1. 문제 2. 문제 해결 논리 1. 문제 이해 주어진 것 int n //반복할 횟수 요구되는 것 String //수, 박을 반복하는 문자열 2. 데이터 구조 결정 StringBuilder 사용 문자열을 동적으로 생성하고 수정할 때 유용한 클래스 String은 수정 불가하므로 문자열을 수정할 때마다 새로운 객체가 생성됨. 따라서 메모리 낭비와 성능 저하 StringBuilder의 주요 메소드 append() : 문자열 뒤에 추가 insert() : 지정된 위치에 삽입 delete() : 지정된 시작과 끝 인덱스 사이의 문자열 삭제 replace() : 지정된 시작과 끝 인덱스 사이의 문자열을 다른 값으로 대체 reverse() : 문자열을 거꾸로 뒤집기 toString() : StringBuilder 객..

PS/Programmers

[level1, Map] 신고 결과 받기

1. 문제 2. 문제 해결 논리 문제 이해 주어진 것 String[] id_list //유저 Id 배열 String[] report //신고 정보(신고자, 피 신고자) 배열 int k // 정지 기준 신고 횟수 요구되는 것 int[] //각 유저 별 신고 처리 메일 발송 횟수 배열 데이터 구조 결정 Map 구조 사용 키-값 저장 : 각 유저 별(Key) 유저 정보(Value, 피 신고 횟수 or 신고자 목록) -> Map 사용 빠른 조회 속도 : HashMap(해시 함수 이용) -> 조회 속도 빠름 유연한 사이즈 : Map은 동적으로 크기 조절 가능 -> 유저의 수가 변동될 때에도 구조 유지 가능 알고리즘 설계 각 유저 별 유저 정보를 위한 Map 생성 각 유저 Id와 인덱스를 저장할 Map1 생성 피 ..

git-sun
'알고리즘' 태그의 글 목록