백준 10

[백준] 14500번 : 테트로미노 (Java)

14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변 www.acmicpc.net 📚 문제 한 줄 요약 주어진 테트로미노(4칸의 연속으로 이어진 도형) 모양으로 계산한 수의 합의 최댓값 구하기 📚 문제 포인트 : 어떻게 주어진 테트로미노 모양으로 계산한 수의 합을 전부 탐색해볼 수 있을까? 📚 풀이 위 질문에 대해 나는 완전 탐색으로 풀기로 결정했다. 주어진 도형은 총 5가지로, 회전, 대칭한 모양으로 탐색할 수도 있다. 회전 대칭까지 고려하면 고려해야 하는 모양은 아래와 같고, 총 19가지이다. 이 경우의 수를 모두 탐색할 때 실행 횟수를 계..

Algorithm 2022.04.07

[백준] 1476번 : 날짜 계산(C++)

1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 📚 문제 한 줄 요약 mod값인 E S M으로 원래 값(year) 알아내기 📚 문제 포인트 : mod 연산 결과로 원래 값을 어떻게 알아낼까? 📚 풀이 mod연산을 공부해본 결과, mod연산 결과값으로 원래 값을 딱 떨어지게 계산할 수 있는 공식은 없다고 결론 내리고 다음과 같이 풀이했다. E, S, M는 다음과 같은 연산으로 나온 값이다. 현재 연도를 year이라고 하겠다. E = (year-1) mod 15 + 1 S = (year-1) mod 28 + 1 M =..

Algorithm 2021.12.31

[백준] 10845번 : 큐 (C++)

10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 📚 문제 한 줄 요약 큐를 구현하고 문제에서 제시한 규칙으로 입력을 처리해 큐를 다루는 문제 📚 풀이 C언어라면 Linked List를 이용해서 큐의 구조와 함수를 구현해야 할 것이다. 하지만, C++ 언어를 사용한다면 직접 Queue(큐)를 구현하는 것보다 라이브러리를 사용하는 것이 효율적이다. 여기서는 큐의 구조에 대해 다루기보다 라이브러리 함수를 이해하는 것을 위주로 풀이한다. 문제에서 주어진 입력 처리와 C++ 내장 함수에 차이가 있기 때문..

Algorithm 2021.12.03

[백준] 2309번 : 일곱 난쟁이 (C++)

2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 📚 문제 한 줄 요약 난쟁이의 키의 합이 100인 것을 이용해 아홉 명 중 누가 진짜 일곱 명의 난쟁이인지 알아내기 📚 문제 포인트 : 9명 중 7명의 키의 합이 100, 키를 오름차순으로 출력 📚 풀이 (핵심 : 아홉 명 중 일곱 명 골라내는 방법 생각하기) 여기서 포인트는 아홉 명 중 합이 100이 되는 일곱 명을 알아내는 것인데 이를 달리 말하면 입력받은 데이터 중 두 개의 값을 빼서 합이 100이 되는 값을 찾아라는 말과 같다. 위를 이용해서 for문으로 전체 탐..

Algorithm 2021.11.28

[백준] 1978번 : 소수 찾기 (C++)

1978번: 소수 찾기 첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다. www.acmicpc.net 📚 문제 한 줄 요약 최대 100개의 1000보다 작은 수가 주어졌을 때 소수가 몇 개인지 구하기 📚 풀이 (핵심 : 어떻게 소수인지 판별하는 연산을 구현할 것인가?) 문제 해결 순서는 다음과 같이 계획했다. 1. 입력 데이터 받기 (숫자의 개수 N, 숫자) 2. 소수 구하기 3. 소수의 개수 출력하기 소수를 구하는 과정은 다음과 같이 구현했다. // 미리 소수 개수를 증가시킨다.(1은 소수가 아니므로 제외.) if (num >= 2) primeNum++; for (int i = 2; i*i

Algorithm 2021.11.27

[백준] 4375번 : 1 (C++)

4375번: 1 2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오. www.acmicpc.net 📚 문제 한 줄 요약 1로만 이루어진 n의 배수 중 가장 작은 자릿수 찾기 📚 고민한 부분 1. 입력이 언제가 마지막인지 알 수 없는데 어떻게 입력받아야 할까? 이 부분은 예전에 같은 유형은 겪은 적이 있어서 쉽게 해결했다. 아래 링크의 문제 풀이를 참고하였다. ▶ https://nhee-devlog.tistory.com/2 2. 자릿수를 늘린 수열 값을 그대로 저장하면 변수 최대 크기를 넘기는데 어떻게 처리해야 할까? 이는 mod값을 이용하는 걸로 해결하였다. 자세한 내용은 풀이에서 다루었다. 📚 풀이 (핵심 : 어떻게..

Algorithm 2021.11.25

[백준] 1037번 : 약수 (C++)

문제 링크 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 문제 한 줄 요약 약수를 이용해서 원래 숫자 N 구하기 풀이 (핵심 : 약수로 어떻게 N을 구할 수 있느냐를 생각해내기) N을 가장 작은 수로 나눈다면 몫은 가장 큰 수가 될 것이다. 반대로, N을 가장 큰 수로 나눈다면 몫은 가장 작은 값이 될 것이다. 즉, 주어진 약수의 최솟값과 최댓값을 곱하면 N의 값이 나오게 될 것이다. (단, 약수가 하나일 때는 약수의 제곱을 해준다.) 이를 이용해 다음과 같은 순서로 문제를 해결했다. 1. 입력 데이..

Algorithm 2021.11.23

[백준] 1181번 : 단어 정렬 (C++)

문제 링크 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 문제 한 줄 요약 문제에서 주어진 '요구 조건 그대로' 단어 정렬하기 풀이 문제 자체가 복잡하지는 않았습니다. 적혀 있는 문장 순서대로 따라 풀면 해결되는 문제입니다. 저는 다음과 같은 순서로 문제를 해결했습니다. 1. 입력 데이터 저장하기 2. 문제에서 주어진 조건으로 정렬하기 3. 정렬한 데이터 출력하기 자세한 풀이는 다음과 같습니다! 1. Input Data : 개수 N과 N개의 string 입력받기 int N; cin >> N; fo..

Algorithm 2021.09.04

[백준] 10951번 : A+B - 4 (C++)

문제 두 정수 A와 B를 입력받은 후, A+B 출력하는 프로그램 작성. 문제만 보면 단순합니다. 하지만, 이전 문제인 백준 알고리즘 19050번 : A+B - 3 문제와는 다른 점이 있죠. 바로 입력이 다음과 같다는 것입니다. 예제 입력 2 2 3 5 6 4 5 9 7 1 테스트 케이스가 몇 개인지 알려주지 않기 때문에 코드를 짤 때 어떻게 "테스트 케이스가 끝"임을 인식할 수 있을지 고민해야 합니다. 힌트 이 문제의 힌트는 다음과 같습니다. 더보기 while문을 사용하면 됩니다😀 Code 코드는 다음과 같이 작성하면 됩니다! 더보기 #include using namespace std; int main(){ int A, B; while(cin >> A >> B) cout

Algorithm 2021.07.27