Stay Hungry Stay Foolish

BOJ 코딩테스트/Bronze 121

[BOJ] 2460. 지능형 기차 2 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2460풀이 방법내릴 때는 빼고, 탈 때는 더한다.그리고 연산 결과를 max() 함수를 통해 최댓값을 갱신한다. 최댓값 갱신result = max(result, max_on) Solutionget_off, get_on = [], []for _ in range(10): off, on = map(int, input().split()) get_off.append(off) get_on.append(on)result, max_on = 0, 0for off, on in zip(get_off, get_on): max_on -= off max_on += on result = max(result, max_on)p..

[BOJ] 3460. 이진수 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/3460풀이 방법1️⃣ 이진수 변환format(int(input()), 'b')변환 결과 타입은 정수형이 아닌 str 이다.2️⃣ 뒤집기문자열[::-1]슬라이싱을 이용해 전체를 한번에 뒤집는다. [[파이썬] 이진법, 이진수, 2진수 변환 방법] 🔗 https://dev-cloud.tistory.com/416SolutionT = int(input()) # 테스트 케이스 수for test_case in range(1, T + 1): n = format(int(input()), 'b')[::-1] # 양의 정수 n -> 이진수 변환 -> 뒤집기 result = [] # 결과를 담을 리스트 for i in ..

[BOJ] 2501. 약수 구하기 (Python/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/2501풀이 방법약수 구하기N의 약수를 모두 찾기 위해 1부터 N의 제곱근 까지의 수 i를 확인한다.만약 i가 N의 약수라면 i 와 N / i 를 약수 리스트에 추가한다. 이때, i와 N / i 가 같지 않으면 중복을 피하기 위해 둘 다 추가한다.예를 들어 N이 36일 때, 약수로 6이 두 번 나올 수 있기 때문이다.정렬약수를 모두 찾은 후, 작은 순서로 정렬하여 K번째 작은 약수를 찾는다.출력약수의 개수가 K 보다 크거나 같다면, 정렬된 리스트에서 K 번째 약수를 출력한다.약수의 개수가 K 보다 적다면 0을 출력한다.✔️ 정렬 방법sorted(divisor)리스트 혹은 문자열 등을 내장함수로 이용해 정렬할 수 있다.sort()..

BOJ 10798번 : 세로읽기 (Python/수학/Bronze 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/10798설명영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’가 있다.칠판에 붙여진 단어들이 주어질 때, 영석이가 세로로 읽은 순서대로 글자들을 출력하는 프로그램을 작성하시오. 총 5줄이지만 각 줄은 가변적이다.  Solutionletters = [input() for i in range(5)]for j in range(15): #행의 길이 for i in range(5): #열 if j

BOJ 1934번 : 최소공배수 (Python/수학/Bronze 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/1934설명A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소 공배수라고 한다. A와 B의 최소공배수를 구하라. 풀이sol.1for문으로 45000부터 1까지 일일이 검사한다. a와 b를 i로 나눈 나머지가 0일 때 몫을 a와 b에 다시 저장하고 결과값에 i를 곱해 누적한다. for문이 종료되면 a와 b의 곱을 다시 결과값에 곱하며 저장한다.   큰 수부터 탐색하는 이유for i in range(45000, 1, -1): if a % i == 0 and b % i == 0: 45000부터 1까지 거꾸로 탐색하는 이유는 최대공약수를 가능한 한 빨리 찾기 위함이다. 큰 수부터 ..

BOJ 2775번 : 부녀회장이 될테야 (Python/구현/Bronze 1)

[문제 링크] 👉 https://www.acmicpc.net/problem/2775설명아파트 a층 b호에 거주하려면 (a - 1)층의 1호부터 b호까지의 사람들 수의 합만큼 데리고 와야 한다.이 아파트는 0층부터 있고 1호부터 있다. 0층에는 i호 = i명이 사는데, 1호에는 1명, 2호에는 2명씩 산다는 말이다.모든 거주자들이 위 조건을 모두 만족하고 거주하고 있다고 했을 때 a층 b호에는 총 몇 명을 데리고 와야 하는지 출력해야 한다. 풀이2층 3호의 사람 수를 구해야 할 때 1호2호3호2층1명(1+3) = 4명(1+3+6) = 10명1층1명(1+2) = 3명(1+2+3) = 6명0층1명2명3명  0층은 사람 수가 일정하므로 먼저 0층의 3호까지의 사람 수를 저장한다.ho = [i for i in ..

BOJ 11721 : 열 개씩 끊어 출력하기 (Java/구현/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/11721설명 입력으로 주어진 단어를 열 개씩 끊어서 한 줄에 하나씩 출력한다. 단어의 길이가 10의 배수가 아닌 경우에는 마지막 줄에는 10개 미만의 글자만 출력할 수도 있다.  풀이sol.1카운트 변수를 사용한다. for문에서 글자를 한 줄에 계속 출력하면서 카운트 값도 하나씩 늘린다. 카운트 값이 10이 되면 카운트 변수를 0으로 초기화하고 다음줄로 넘어가서 출력하도록 한다. length()문자열의 길이를 반환한다. charAt()자바에서 String 클래스에 포함된 메서드로, 문자열에서 특정 인덱스에 있는 문자를 반환한다. 이 메서드를 사용하면 문자열의 각 문자에 직접 접근할 수 있다.char ch = str.charAt..

BOJ 3009 : 네 번째 점 (Java/구현/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/3009설명 세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.  풀이아래 사각형은 입력이 다음과 같을 때의 그림이다. 첫 번째 열은 x값, 두 번째 열은 y값을 의미한다.  5 55 77 5 어렵게 생각할 거 없이 x와 y값에서 중복이 없는 숫자를 출력하면 된다. sol.1첫 번째 수와 두 번째 수가 같으면 세 번째 수를 출력한다.첫 번째 수와 세 번째 수가 같으면 두 번째 수를 출력한다.첫 번째 수와 같은 수가 없으면 첫 번째 수를 출력한다. sol.2 - 삼항 연산자를 이용 Expression1이 true이면 Expression2를 반환하고, false이면 Expr..

BOJ 5086 : 배수와 약수 (Java/수학/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/5086설명두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.첫 번째 숫자가 두 번째 숫자의 약수이면 factor 출력첫 번째 숫자가 두 번째 숫자의 배수이면 multiple 출력첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니면 neither 출력두 수가 0이면, 프로그램을 종료한다. 풀이if { ...} else if { ...} else { ...}  Solutionsol.1import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedRea..

BOJ 10810 : 공 넣기 (Java/구현/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/10810설명바구니 개수 N개가 있고, N개의 바구니에 M번의 공을 넣는다. 처음엔 모두 빈 바구니이고, 바구니에는 1개의 공만 넣을 수 있다.입력이 만일 1 2 3 이라고 할 때, 1번째 바구니부터 2번째 바구니까지 3번 공을 넣는다.다음 입력이 3 4 4 라고 할 때, 3번째 바구니부터 4번째 바구니까지 4번 공을 넣는다.만일 바구니에 공이 들어가 있으면 공을 빼고 새로 공을 넣는다.그래서 N개의 바구니에 몇 번 공이 들어가 있는지 모두 출력하면 된다. 빈 바구니는 0을 출력한다. 풀이바구니에 공을 넣는 방법은 다음과 같다.for (int k = mInt[0] - 1; k  mInt 배열에는 i, j, k가 들어있다. i 번..

BOJ 1598 : 꼬리를 무는 숫자 나열 (Java/수학/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/1598설명원숭이는 두 개의 자연수를 아무거나 생각한다. 그리고 숫자판에서 두 개의 자연수 사이의 직각거리를 구하면 된다. 여기서 직각거리는 동서방향거리와 남북방향거리의 합을 뜻한다. 예를 들어 숫자판에서 11과 33을 생각했다고 하자. 그렇다면 11과 33사이의 직각거리는 8이 된다.(동서방향거리 : 6, 남북방향거리 : 2) 다음 그림에 잘 나타나있다. 풀이입력이 11과 33이라고 하자.숫자판에서 숫자가 아래로 4개씩, 즉 4의 배수마다 숫자가 나열되기 때문에 4로 나누어줘야 한다. 위치 도출 방법11을 4로 나누면 몫은 2, 나머지는 3이다. 이 말은 즉, 11은 2번째 줄 다음줄인 3번째 줄에 나머지가 3이므로 3번째에 ..

BOJ 1284 : 집 주소 (Java/구현/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/1284설명각 숫자 사이에는 1cm의 여백이 들어가야한다.1은 2cm의 너비를 차지해야한다. 0은 4cm의 너비를 차지해야한다. 나머지 숫자는 모두 3cm의 너비를 차지한다.호수판의 경계와 숫자 사이에는 1cm의 여백이 들어가야한다.여백을 포함한 호수판의 총 너비를 구해야 한다. 풀이문자열로 숫자를 입력받는다.split() 메서드를 사용해 문자열을 분리하여 배열에 저장한다.반복문으로 배열에서 하나씩 꺼낸다.각 문자를 정수형으로 변환하고 각 조건에 맞게 계산한다공백을 포함시켜야 하므로 숫자 너비에 각 1씩 더해야 한다. split() 메서드String[] nums = num.split(""); 분리한 것을 배열에 저장해야 한다. ..

BOJ 1267 : 핸드폰 요금 (Java/구현/Bronze 3)

[문제 링크] 👉 https://www.acmicpc.net/problem/1267설명영식 요금제는 30초마다 10원씩 청구된다. 이 말은 만약 29초 또는 그 보다 적은 시간 통화를 했으면 10원이 청구된다. 만약 30초부터 59초 사이로 통화를 했으면 20원이 청구된다. 민식 요금제는 60초마다 15원씩 청구된다. 이 말은 만약 59초 또는 그 보다 적은 시간 통화를 했으면 15원이 청구된다. 만약 60초부터 119초 사이로 통화를 했으면 30원이 청구된다. 통화 시간 목록이 주어지면 어느 요금제를 사용 하는 것이 저렴한지 출력하는 프로그램을 작성하시오. 풀이각 시간마다 30과 60으로 나누고, 그 몫에 + 1을 해준다.( 각 시간 /  30 ) + 1 ( 각 시간 /  60 ) + 1 + 1을 해..

BOJ 9295 : 주사위 (Java/구현/Bronze 4)

[문제 링크] 👉 https://www.acmicpc.net/problem/9295 설명두 개로 들어온 입력의 수를 더해서 출력 형식에 맞게 출력하면 된다.  Solutionimport java.io.*;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t = Integer.parseInt(br.readLine()); for (int i = 0; i   👩‍💻 회고토큰을..

BOJ 5596 : 시험문제 (Java/구현/Bronze 4)

[문제 링크] 👉 https://www.acmicpc.net/problem/5596 설명두 명의 총 점수(정보, 국어, 과학, 영어) 중 더 높은 점수를 출력하는 문제이다. 풀이StringTokenizer공백을 포함하는 경우의 정수형을 입력하고 싶을 때 이용, 두 번째 인자에는 default로 공백이다. "/" 기준으로 분리하고 싶으면 인자로 넘기면 된다.StringTokenizer st1 = new StringTokenizer(br.readLine()); 총 두 줄을 입력받으려면 인스턴스를 두 개 생성한다. 굳이 여러 개 생성하지 않고 반복문으로 입력받아도 되긴 하다.StringTokenizer st1 = new StringTokenizer(br.readLine());StringTokenizer st..