본문 바로가기

백준56

[C++] [백준 2941] 크로아티아 알파벳 문제 풀기 전 생각 : /* 먼저 크로아티아 알파벳인지 아닌지 판별하는 함수를 만든다. 문자열로 입력받은후 두 글자씩 위의 함수에 넣는다. 만약 크로아티아 알파벳 이라면 카운트를 1 증가하고 다음 글자를 패스한다. 예외로 dz= 는 세글자 이기 때문에 dz=일 경우 다음 두 글자를 패스한다. 만약 크로아티아 알파벳이 아니라면 그냥 카운트만 1 증가시킨다. 마지막에 카운트를 출력한다. */ #include #include using namespace std; int iscroi(string s){ string croi[8] = {"c=","c-","dz","d-","lj","nj","s=","z="}; for(int i=0 ; i> s; for(int i=0 ; i 0 ){ if(iscroi(s.subst.. 2021. 7. 25.
[C++] [LeetCode 1154] Day of the Year (pps 5-4) 문제 풀기 전 생각 : /* 예전에 날짜 구하는 문제를 수업과제로 해본 적이 있어서 푸는 방법을 알고 있었다. 대신 입력받은 date를 year month day로 나눠야 한다. 이 부분은 split이 없으니 직접 반복문으로 처리해줘야 한다. */ #include class Solution { public: int dayOfYear(string date) { int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; int ymd[3]; int i=0,answer=0; string tmp = ""; date += '-'; for(int j=0 ; j 2)++d; return d; } }; 삼항 연산자를 잘 사용하면 저렇게 간단하게도 풀수 있구나 신기하구만요 subst.. 2021. 7. 18.
[JAVA] [백준 5355] 화성 수학 (pps 5-2) 문제 풀기 전 생각 : /* 처음에 c++ 로 풀려고 했는데 문자열을 입력받고 처리하는 과정이 귀찮아져서 split 기능이 내장된 자바를 사용하기로 했다. 자바로 총 몇번을 입력받을지 스캐너로 입력받고 해당 횟수만큼 반복문을 사용한다. 매 반복마다 한 줄 단위로 문자열을 입력받고 입력받은 문자열을 스플릿 한다. 스플릿 한후 가장 첫번째 문자는 숫자이다. 이 숫자를 float 타입으로 변환하고 그 다음에 오는 연산자들에 따라서 더하고 빼고 곱한다. */ import java.util.Scanner; class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = Integer.parseInt(s... 2021. 7. 18.
[C++] [백준 2163] 초콜릿 자르기 (pps 5-1) 문제 풀기 전 생각 : /* 초콜릿을 최소한의 자르기로 1x1로 자르기 위해선 더 긴 모양이 나오도록 자르고 긴 모양으로 나온것을 쪼개는 것이 가장 적은 횟수의 자르기로 자를 수 있다. 예를 들어 ***** ***** ***** ***** 의 5x4 초콜릿이 있다고 한다면 ***** ***** ***** *****로 나누면 3번의 자르기 그리고 ***** 를 * * * * *로 나누기 위해 4번의 자르기 그리고 ****가 세개 있으니 4번씩 4회 자른 셈이다 그렇게 총 19번의 자르기로 자를 수 있다 결국 5x4 = 20 20-1 == 19 a * b - 1 가 답이다. */ https://www.acmicpc.net/problem/2163 2163번: 초콜릿 자르기 정화는 N×M 크기의 초콜릿을 하나 .. 2021. 7. 18.
[C++] [백준 1476] 날짜 계산 (pps 4-9) 문제 풀기 전 생각 : /* e s m 을 모두 입력받고 변수 세개를 선언하고 1으로 초기화한다. count 변수를 만들고 1로 초기화 한다. 반복문으로 이 변수들을 1씩 증가시키며 입력받은 e s m 과 같다면 count을 출력한다. 그리고 조건문으로 e는 15보다 크다면 s 는 28보다 크다면 그리고 m은 19보다 크다면 1로 초기화한다. */ #include using namespace std; int main() { int answer[3]; cin >> answer[0] >> answer[1] >> answer[2]; int e=1,s=1,m=1; int count = 1; while(count++){ if((e == answer[0]) && (s == answer[1]) && (m == ans.. 2021. 7. 18.
[C++] [백준 1712] 손익분기점 (pps 4-8) 문제 풀기 전 생각 : /* 문제를 처음 봤을 때 정답률이 20퍼센트 즈음이라 많이 어려운가 싶어 입출력 예시를 보니 너무 간단한 문제였다. 결국 손익 분기점을 계산하기 위해 한대를 팔때 얻는 순수익을 구해야 한다. 순수익은 c-b 이다 만약 c-b가 0보다 작거나 같으면 해당 제품은 순익분기점이 존재하지 않는다. 그리고 순익분기점은 총 유지비를 c-b로 나누었을때 나오는 값의 1을 더한것이다. */ #include using namespace std; int main() { int a,b,c; cin >> a >> b >> c; if(c 2021. 7. 18.
[C++] [leetCode 258] Add Digits (pps 4-6) 문제 풀기 전 생각 : /* 재귀 함수를 사용해서 풀기로 생각했다. 숫자가 입력되면 그 숫자를 string 타입으로 변환하고 변환된 string을 쪼개서 모두 더하고 더한 것을 재귀함수 형식으로 콜한다. 그리고 만약 입력된 숫자가 10보다 작다면 리턴한다. */ #include class Solution { public: int addDigits(int num) { if(num < 10) return num; string s = to_string(num); int answer = 0; for(int i=0 ; i 2021. 7. 18.
[C++] [LeetCode 342] Power of Four (ops 4-5) 문제 풀기 전 생각 : /* 4의 power of four 인지 구하는 문제이다 반복문으로 입력받은 숫자 n이 1보다 크거나 같다면 반복한다. 반복마다 n이 1이라면 true를 리턴한다. 만약 n이 4로 나누어 떨어지지 않는다면 false를 리턴한다. 그리고 두 경우에 해당하지 않는다면 n을 4로 나누고 다음 반복으로 넘어간다. 반복이 끝났는데도 리턴되지 않았다면 false 를 리턴한다. */ class Solution { public: bool isPowerOfFour(int n) { while(n >= 1){ if(n == 1) return true; if(n%4 != 0) return false; n = n/4; } return false; } }; https://leetcode.com/proble.. 2021. 7. 17.
[C++] [백준 2775] 부녀회장이 될테야 (pps 4-4) 문제 풀기 전 생각 : /* 먼저 14층까지 각 층마다 14개의 집이 있습니다. 입주 조건에 맞춰 모든 집에 필요한 사람 수를 전부 배열에 저장해두고 입력되는 숫자에 맞춰 인덱싱해 출력하도록 했다. */ #include using namespace std; int main() { int n[15][15]={ 0, }; int t,x,y; for(int i=0 ; i> y; cout 2021. 7. 17.
[C++] [백준 3052] 나머지 (pps 4-3) 문제 풀기 전 생각 : /* 어려운 문제는 아니다. 세트 컨테이너를 사용하면 쉽게 풀수 있다 세트 컨테이너는 중복을 허용하지 않기 때문에 입력받은 숫자를 42로 나눈 나머지값을 세트에 insert하면 중복은 받지 않는다. 그런 다음 세트의 사이즈를 출력하면 우리가 원하는 답을 구할 수 있다. */ #include #include using namespace std; int main() { int n; set s; for(int i=0 ; i> n; s.insert(n%42); } cout 0) a[n%42]=1; for(auto n:a) s+=n; printf("%d",s); } 나는 컨테이너를 사용했지만 위의 코드에선 42칸짜리 배열을 사용했다 저 방법도 나쁘지 않은것 같다. 2021. 7. 17.
[C++] [백준 10757] 큰 수 A+B (pps 4-2) 문제 풀기 전 생각 : /* 우선 string 변수에 숫자 두개를 저장한다. 두 숫자가 길이가 다를수 있으니 더 짧은 숫자 앞에 '0'들을 추가해 길이를 맞춰준다. 그리고 두 숫자를 더할때 overflow가 발생할 수 있으니 두 숫자 모두 앞에 '0'을 더한다. 그리고 맨 뒤에서부터 a+b+overflow 를 한다. a는 첫번째 숫자의 i번째 char이다. b는 두번째 숫자의 i번째 char이다. 만약 오버플로우가 발생하면 overflow라는 변수에 1을 넣고 a+b+overflow-10+'0'을 tmp변수에 넣는다. 발생하지 않으면 0을 넣고 a+b+overflow+'0'를 tmp변수에 넣는다. 그렇게 모든 작업이 끝난후 tmp변수를 리버스 시킨다. 리버스 후 tmp 변수의 첫번째 char가 '0'이라.. 2021. 7. 17.
[C++] [백준 2953] 나는 요리사다 (pps 4-1) 문제 풀기 전 생각 : /* 참가자들의 점수는 총 다섯줄에 걸쳐서 다섯번 입력된다. 우리는 가장 높은 점수를 받은 참가자의 번호와 점수의 합을 저장했다 출력하면 된다. 반복문으로 입력을 받을때마다 판별하면 된다. 간단한 문제이다. */ #include using namespace std; int main() { int n,sum=0,max=0,max_i=0; for(int i=0 ; i n; sum += n; } if(sum > max) { max = sum; max_i = i+1; } } cout 2021. 7. 17.