목록problem solving (13)
배움과 기록의 장

✅ 문제https://www.acmicpc.net/problem/14215 ✅ 풀이우선 세 막대를 이용해 삼각형을 만들 수 있는지 판별해야한다.이를 위해, 삼각형의 조건인을 이용해야한다.먼저 주어진 세 막대 중에서 가장 긴 변의 길이인 max와 나머지 두 변의 길이의 합인 remainders를 찾아준다.삼각형의 조건을 만족한다면, 구하고자하는 삼각형의 최대 둘레는 주어진 세 막대길이를 그대로 합한 값이 된다.삼각형의 조건을 만족하지 않는다면, 막대의 길이를 줄여 삼각형의 조건을 만족하는 동시에 최대 둘레를 구해주어야한다.그렇다면 어떤 막대의 길이를 줄여야할까? 정답은 가장 긴 막대이다. 나머지 두 막대 중에선 줄여봤자 삼각형의 조건을 여전히 만족하지 못하기 때문이다.그럼 가장 긴막대를 얼만큼 줄여야할까?..

✅ 문제https://www.acmicpc.net/problem/15894 ✅ 풀이직접 그려보면서 규칙을 찾아보았다.아래 사진과 같이 3*n + n 규칙이 있다는 것을 알 수 있다.(3*n + n = 4n) int 말고 long형으로 해야함 주의 (n의 최대 경계값인 10^9를 넣고 3*n + n 하면, 아래 사진처럼 범위 초과함)정수자료형(int,long) 범위정수 자료형크기범위int4byte(32bit)-2,147,483,648 ~ 2,147,483,647long8byte(64bit)-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 ✅ 코드import java.util.Scanner;public class Main{ public static vo..

✅ 문제https://www.acmicpc.net/problem/3009 ✅ 풀이x좌표부터 설명x_coordinates라는 어레이리스트에 x좌표를 차례대로 넣는다.이 때, 이미 같은 값이 들어있다면 넣지않고, 이미 있는 값도 지워버린다.그럼 짝이 없는 x좌표 하나만 리스트에 남아있을 것이고, 이 값이 바로 우리가 출력해야할 네번째 점의 x좌표이다.네번째 점의 y좌표 구하는 것도 위와 마찬가지로 구하면 된다! ✅ 코드import java.util.ArrayList;import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); ..

✅ 문제https://www.acmicpc.net/problem/1085 ✅ 풀이x, y, w-x, h-y 값을 배열에 저장한 후, 배열을 순회하며 최솟값을 구해준다. ✅ 코드import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int y = sc.nextInt(); int w = sc.nextInt(); int h = sc.nextInt(); int[] distances = new int[4]; dista..

✅ 문제https://www.acmicpc.net/problem/11653 ✅ 풀이소인수분해 예시주어진 숫자 num 을 for 문을 이용해 i=2부터 시작해 num까지 나누어준다.만약 나누어떨어지면, 그때의 i를 출력해주고 num을 num / i로 업데이트 해준 후, 진행 중이던 for문을 break한다.다시 업데이트 된 num으로 앞의 과정을 반복해준다. (for 문을 이용해 i=2부터 나누기 시작)num이 1이 될 때까지 반복해주면 된다 추가로 읽어보기 좋은 블로그(다른 방법): https://st-lab.tistory.com/152for 안에 while 문for문의 반복문 횟수 √N 번입력(Scanner,BufferedReader) / 출력(System.out.println(),StringBuild..

✅ 문제https://www.acmicpc.net/problem/2563 ✅ 풀이전체 100x100 보드를 나타내는 2차원 배열을 만들어준다. 각 요소의 초기값은 0.입력값으로 left와 bottom 값을 받고, left ~ left+10, bottom ~ bottom+10에 해당하는 영역에 1을 할당해준다. (이 과정을 색종이 수 만큼 반복)100x100 보드를 나타내는 2차원 배열 전체를 순회하며, 요소의 값이 1인 것을 찾아 count 해주면 색종이가 붙은 검은 영역의 넓이를 구할 수 있다. ✅ 코드import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc = new S..

✅ 문제https://www.acmicpc.net/problem/1316 ✅ 풀이String 타입의 reducedStr를 만들어서, 연속하는 중복 문자를 제외하고 담아준다.앞,뒤문자 비교해서다르면 reducedStr에 넣어주기 ex) aabbbcca -> abca reducedStr에 중복하는 문자가 있으면 그룹단어가 아니고, 없으면 그룹단어이다 첫문자와 나머지문자들로 쪼개서 나머지문자들에 첫문자가 포함되어있는지 확인, 있으면 그룹단어 x 없으면 나머지문자가 하나 남을 때까지 반복 (두개 남을 때까지 해도 된다. 어차피 남은 두개가 다른 건 명확하니까)ex) abca -> a, bca 쪼갬 -> bca에 a 포함되어있음 -> 그룹단어 x substring(int beginIndex) 에 대해"emptin..

✅ 문제https://www.acmicpc.net/problem/2941 ✅ 풀이먼저 목록에 나와있는 c=/c-/dz=/d-/lj/nj/s=/z=를 차례대로 갯수를 count 해주고, 제거해준다. 그 이후에 남은 알파벳들은 하나씩 count 해준다.예를 들어 c=의 경우,c=의 갯수 count :{(기존 str길이) - (c=를 제거한 str길이)} / (c=의 길이) 를 해주면 된다. = (str.length() - str.replace("c=", "").length())/2count 해준 c=를 제거 :str = str.replace("c=", " ") * "" 이 아닌 " "으로 해줘야한다. 그 이유는 예를 들어 "lc=j" 라는 문자열이 있을 때, 크로아티아 알파벳의 갯수는 l, c=, j 3개..

✅ 문제https://www.acmicpc.net/problem/1157 ✅ 풀이입력은 대소문자로 된 단어로 받고, 출력은 대문자로 하기때문에 우선 입력받은 단어를 대문자로 바꿔준다. 이때 사용해준 메서드는 문자열.toUpperCase() 이다.그 다음은 가장 많이 사용된 알파벳을 알기 위해 단어에 사용된 A~Z의 갯수를 알아야한다. 사용된 A~Z의 갯수를 담을, 크기 26 초기값이 0인 int 배열(alphabet)을 선언해준다. 단어를 순회하며 사용된 알파벳에 해당하는 배열의 요소에 +1을 해줄 것이다. 사용된 알파벳에 해당하는 배열의 인덱스를 찾을 때, 아스키코드를 사용해줄 것이다. 우리가 만든 배열(alphabet)은 0~25의 인덱스를 가진다. 표를 보면 A~Z가 65~90에 해당한다는 것을 알..

✅ 문제https://www.acmicpc.net/problem/10988 ✅ 풀이주어진 단어 맨 처음을 head, 맨 끝을 tail로 정하여 문자를 비교한다. 같으면 isPalindrome 초기값 1 그대로 두고, 다음 문자 비교를 위해 head++ tail-- 후 반복문 계속 진행, 다르면 isPalindrome 0 할당 후 반복문을 종료(break)한다.반복문은 break 안걸리면 head ✅ 코드import java.util.Scanner;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str = sc.nextLine(); ..