목록Problem Solving (88)
새발블로그
문제https://www.acmicpc.net/problem/4949풀이방법문자열을 잘라서 (, [ 가 들어오면 스택에 넣고, ), ]가 들어왔을 때 짝이 맞는 지 검증문자열 자르는 방법-> 한줄을 입력 받고, char 단위로 끊기 Java에서 char와 Character 차이char: 기본(Primitive) 타입으로 문자 하나를 저장하는 데 사용됨.Character: char 타입을 감싸는 래퍼(Wrapper) 클래스.Character를 사용해야 하는 경우제네릭(Generic) 사용 시 (예: ArrayList)null을 저장해야 하는 경우Character 클래스의 유틸리티 메서드 사용 시 (isDigit(), toUpperCase() 등)Java의 Stack 관련 메서드Java에서는 Stack 클..
문제https://www.acmicpc.net/problem/1541 풀이방법가장 큰 수를 빼야한다고 생각했다.그러므로, ( ) - ( ) - ( ) 이렇게 최대한 크게크게 묶어야한다고 생각하였따 1. 1. \\+를 사용하는 이유+는 정규 표현식에서 하나 이상의 문자을 의미하는 메타 문자로, 단순히 +를 사용하며 정규 표현식으로 인식된다.그러므로 이스케이프 문자를 사용해 \\를 사용해야한다. 2. 문자열과 숫자 변환 관련 문법문자열 -> 숫자Integer.parseInt(String s): 문자열을 int로 변환한다.예: int num = Integer.parseInt("123"); Integer.valueOf(String s): 문자열을 Integer 객체로 변환합니다.예: Intege..
문제https://www.acmicpc.net/problem/1157 풀이방법먼저, 대소문자를 구분하지 않으므로 소-> 대 , 대-> 소 중에 변환하려했는데 최종 값이 대문자이므로 대문자로 변환하였다.각 알파벳의 출현빈도를 저장하였고, 문자열을 순회하며 출현 빈도를 배열에 저장한다.가장 많이 출현한 알파벳을 찾고, 동일한 빈도수가 있다면 ?를 출력할 수 있도록 한다. ++for문for (char c: arr) {// 배열 arr의 각 요소 c에 대해 반복} 문자와 정수간의 연산문자 'A'의 ASCII 값은 65이므로, 'A'를 0으로 맞추기 위해서는 'A'를 빼준다 'A' - 0, 'B' -1, ..... 'Z' 25 풀이import java.io.*;import java.util.Scanner;pub..
문제https://www.acmicpc.net/problem/1152 풀이방법1. 처음 생각 공백을 기준으로 단어를 배열에 저장하고, 이 배열의 길이를 반환한다문제: 공백이 있으면 공백도 단어로 카운트한다.=> 해결 : trim()을 통해 앞 뒤 공백을 없애준다.문제: 연속된 공백은?=> regex를 " " 에서 "\\s+"로 변경해 연속된 공백을 처리할 수 있게 해주었다. 문제: 빈 문자열이 입력되었을 때도 단어로 카운트 한다=> 조건문을 통해 해당 조건을 카운트 하지 않도록 바꿔주었다. 풀이import java.io.*;import java.util.Scanner;public class Main { public static void main(String[] args) throws IOExcep..
문제https://www.acmicpc.net/problem/1032 풀이방법문자열의 길이가 같으므로, 첫번째 문자열을 기준으로 다른 문자열들과 비교하며 다른 부분만 ?로 바꾸려하였다.인덱스를 변경하려 하니, 자바에서 문자열은 불변 객체이기 때문에 직접 인덱스를 변경할 수 없다는 것을 알게 되었다.따라서 문자열을 문자 배열로 변환한 후 필요한 인덱스를 변경하고 문자열을 변환하는 방법을 사용해보았다. 풀이import java.io.*;import java.util.Scanner;public class Main { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); ..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12906 풀이방법 set을쓰려다가 숫자들이 정렬이 되어있으면 안돼서 사용하지 않기로 했고, 봤을 때 숫자들이 차례대로 등장하다가 바뀌고 하는 식이길래 바로 앞의 원소와 같지 않으면 Push_back하는 방법으로 구현하였다. 다른 사람의 신기한 풀이도 있었다. 풀이1 #include #include using namespace std; vector solution(vector arr) { vector answer; answer.push_back(arr[0]); for (int i=1; i
문제 https://school.programmers.co.kr/learn/courses/30/lessons/1845 풀이방법 일단 N/2 마리로 제한을 두고, set을 통해서 고를 수 있는 선택지를 줄였다 그 다음에 N/2보다 set의 길이가 같거나 작을 때 set size를 반환하고, 그렇지 않으면 N/2의 값을 반환하였다. 근데 이 로직을 다른 사람은 좀 더 간결하게 min을 사용해서 표현했길래 주워왔다 풀이1 #include #include using namespace std; int solution(vector nums) { int answer = 0; int N=nums.size(); int max_choice = N/2; set s(nums.begin(), nums.end()); if (s...
문제 https://school.programmers.co.kr/learn/courses/30/lessons/181924 풀이방법 swap() 함수를 사용하기 위해 algorithm 함수를 include했다 후에 범위 기반 for문을 이용해 swap 해주었다. 그런데 타입 추론이라는 게 있더라!! c++ 타입 추론 auto auto x = 10; //x의 타입은 int로 추론 decltype 인수로 지정한 표현식의 타입을 알아냄 double x = 10.0; decltyple(x) y =9.0; auto와 다르게, const 와 레퍼런스(&)를 제거하지 않는다. for(const auto& query : queires) 해당 for 문을 이렇게 해도 무방하다는 뜻이다 풀이 #include #include..