├── JE ├── 10주차 │ ├── Dartgame.py │ ├── MidCharacter.py │ └── ShortestDistance.py ├── 11주차 │ ├── JoyStick.py │ ├── NoSameNumbers.py │ └── NumbersAndCharacter.py ├── 13주차 │ └── MyCharacter.py ├── 16주차 │ ├── BiggestNumber.py │ └── WeirdCharacter.py ├── 17주차 │ ├── DiskControllers.py │ ├── MakingStars.py │ └── StockPrices.py ├── 18주차 │ ├── MaskingPhoneNumber.py │ ├── MultiplyColRow.py │ └── NumberExpression.py ├── 1주차 │ ├── Country124Numbers.py │ ├── PhoneKetMon.py │ └── PlayerNotCompleted.py ├── 2주차 │ ├── GymSuit.py │ ├── NumberK.py │ └── Square.py ├── 3주차 │ ├── AddYinYang.py │ ├── MakePrimeNumber.py │ └── RemovePairs.py ├── 4주차 │ ├── DotProduct.py │ ├── PickDoll.py │ └── ProductDevelop.py ├── 5주차 │ ├── GetLottoMaxMin.py │ ├── RecommendNewId.py │ └── Spicy.py ├── 6주차 │ ├── Budget.py │ ├── Keypad.py │ └── OpenChat.py ├── 7주차 │ ├── FailRate.py │ ├── FindDivisor.py │ └── ZipString.py ├── 8주차 │ ├── ChooseTwoNums.py │ ├── ReverseTernary.py │ └── TargetNumber.py ├── 9주차 │ ├── Date.py │ ├── FindPrime.py │ └── SecretMap.py └── README.md ├── README.md ├── YoonJeong ├── 001주차 │ ├── 124나라의 숫자.py │ ├── 완주하지못한선수.py │ └── 폰켓몬.py ├── 002주차 │ ├── K번째수.py │ ├── 멀쩡한사각형.md │ └── 체육복.py ├── 003주차 │ ├── 소수만들기.py │ ├── 음양더하기.py │ └── 짝지어제거하기.py ├── 004주차 │ ├── 기능개발.py │ ├── 내적.py │ └── 크레인인형뽑기게임.py ├── 005주차 │ ├── 더맵게.py │ ├── 로또의최고순위와최저순위.py │ └── 신규아이디추천.py ├── 006주차 │ ├── 예산.py │ ├── 오픈채팅방.py │ └── 키패드누르기.py ├── 007주차 │ ├── 문자열압축.py │ ├── 실패율.py │ └── 약수의개수와덧셈.py ├── 008주차 │ ├── 3진법뒤집기.py │ ├── 두개뽑아서더하기.py │ └── 타겟넘버.py ├── 009주차 │ ├── 2016년.py │ ├── 비밀지도.py │ └── 소수찾기.py ├── 010주차 │ ├── 가운데글자가져오기.py │ ├── 게임맵최단거리.py │ └── 다트게임.py ├── 011주차 │ ├── 같은숫자는싫어.java │ ├── 같은숫자는싫어.py │ ├── 숫자문자열과영단어.java │ ├── 숫자문자열과영단어.kt │ └── 조이스틱.py ├── 012주차 │ ├── 괄호변환.py │ ├── 나누어떨어지는숫자배열.py │ └── 프린터.py ├── 013주차 │ ├── 문자열내마음대로정렬하기.py │ └── 수식최대화.py ├── 015주차 │ ├── 1주차.py │ ├── 다리를지나는트럭.py │ └── 피보나치수.py ├── 016차 │ ├── 구명보트.py │ └── 이상한문자만들기.py ├── 017주차 │ ├── 디스크컨트롤러.py │ ├── 주식가격.py │ └── 직사각형별찍기.py ├── 018주차 │ ├── 숫자의표현.py │ ├── 핸드폰번호가리기.py │ └── 행렬의곱셈.py ├── 021주차 │ ├── H-Index.py │ ├── 없는숫자더하기.py │ └── 큰수만들기.py ├── 022주차 │ ├── 수박.py │ └── 예상대전표.py ├── 20주차 │ ├── 땅따먹기.py │ ├── 카펫.py │ └── 하샤드수.py └── README.md ├── hanseok ├── 10주차 │ ├── 가운데글자.py │ ├── 게임맵최단거리.py │ └── 다트게임.py ├── 11주차 │ ├── 같은숫자는싫어.py │ ├── 숫자 문자열과 영단어.py │ └── 조이스틱.py ├── 12주차 │ ├── 괄호변환.py │ ├── 나누어떨어지는숫자배열.py │ └── 프린터.py ├── 13주차 │ ├── 거리두기 확인하기.py │ ├── 문자열 내 마음대로 정렬하기.py │ └── 수식 최대화.py ├── 1주차 │ ├── countriesOf124.py │ ├── notFinshePlayer.py │ └── ponkesmon.py ├── 2주차 │ ├── K번째수.py │ ├── 멀쩡한사각형.py │ └── 체육복.py ├── 3주차 │ ├── 소수만들기.py │ ├── 음양더하기.py │ └── 짝지어제거하기.py ├── 4주차 │ ├── 기능개발.py │ ├── 내적.py │ └── 크레인 인형뽑기 게임.py ├── 5주차 │ ├── 더맵게.py │ ├── 로또의 최고 순위와 최저 순위.py │ └── 신규아이디추천.py ├── 6주차 │ ├── 예산.py │ ├── 오픈채팅방.py │ └── 키패드누르기.py ├── 7주차 │ ├── 문자열압축.py │ ├── 실패율.py │ └── 약수의개수와덧셈.py ├── 8주차 │ ├── 3진법뒤집기.py │ ├── 두개뽑아더하기.py │ └── 타겟넘버.py └── 9주차 │ ├── 2016.py │ ├── 비밀지도.py │ └── 소수찾기.py ├── juhee2 ├── 10주차 │ ├── 가운데글자가져오기.py │ ├── 게임맵최단거리.py │ └── 다트게임.py ├── 11주차 │ ├── 같은숫자는싫어.py │ ├── 숫자문자열과영단어.py │ └── 조이스틱.py ├── 12주차 │ ├── 괄호변환.py │ ├── 나누어떨어지는숫자배열.py │ └── 프린터.py ├── 13주차 │ ├── 거리두기확인하기.py │ ├── 문자열내마음대로정렬하기.py │ └── 수식최대화.py ├── 15주차 │ ├── 1주차.py │ ├── 다리를지나는트럭.py │ └── 피보나치수.py ├── 17주차 │ ├── 디스트컨트롤러.py │ ├── 주식가격.java │ └── 직사각형별찍기.py ├── 18주차 │ ├── 숫자의표현.py │ ├── 핸드폰번호가리기.py │ └── 행렬의곱셈.py ├── 1주차 │ ├── 123나라의숫자.py │ ├── 완주하지못한선수.py │ └── 폰켓몬.py ├── 20주차 │ ├── 땅따먹기.py │ ├── 카펫.java │ └── 하샤드수.java ├── 21주차 │ ├── H-Index.py │ ├── 없는숫자더하기.py │ └── 큰수만들기.py ├── 2주차 │ ├── K번째수.py │ ├── 멀쩡한사각형.py │ └── 체육복.py ├── 3주차 │ ├── 소수만들기.py │ ├── 음양더하기.py │ └── 짝지어제거하기.py ├── 4주차 │ ├── 기능개발.py │ ├── 내적.py │ └── 크레인인형뽑기게임.py ├── 5주차 │ ├── 더맵게.py │ ├── 로또의최고순위와최저순위.py │ └── 신규아이디추천.py ├── 6주차 │ ├── 예산.py │ ├── 오픈채팅방.py │ └── 키패드누르기.py ├── 7주차 │ ├── 문자열압축.py │ ├── 실패율.py │ └── 약수의개수와덧셈.py ├── 8주차 │ ├── 3진법뒤집기.py │ ├── 두개뽑아서더하기.py │ └── 타겟넘버.py ├── 9주차 │ ├── 2016년.py │ ├── [1차]비밀지도.py │ └── 소수찾기.py └── README.md ├── 백준 ├── Bronze │ ├── 1000. A+B │ │ ├── A+B.java │ │ └── README.md │ ├── 1008. A/B │ │ ├── A/B.java │ │ └── README.md │ ├── 10101. 삼각형 외우기 │ │ ├── README.md │ │ └── 삼각형 외우기.java │ ├── 1037. 약수 │ │ ├── README.md │ │ └── 약수.java │ ├── 10798. 세로읽기 │ │ ├── README.md │ │ └── 세로읽기.java │ ├── 10807. 개수 세기 │ │ ├── README.md │ │ └── 개수 세기.java │ ├── 10809. 알파벳 찾기 │ │ ├── README.md │ │ └── 알파벳 찾기.java │ ├── 1085. 직사각형에서 탈출 │ │ ├── README.md │ │ └── 직사각형에서 탈출.java │ ├── 10870. 피보나치 수 5 │ │ ├── README.md │ │ └── 피보나치 수 5.java │ ├── 10871. X보다 작은 수 │ │ ├── README.md │ │ └── X보다 작은 수.kt │ ├── 10872. 팩토리얼 │ │ ├── README.md │ │ └── 팩토리얼.java │ ├── 10988. 팰린드롬인지 확인하기 │ │ ├── README.md │ │ └── 팰린드롬인지 확인하기.java │ ├── 10989. 수 정렬하기 3 │ │ ├── README.md │ │ └── 수 정렬하기 3.java │ ├── 11005. 진법 변환 2 │ │ ├── README.md │ │ └── 진법 변환 2.java │ ├── 11021. A+B - 7 │ │ ├── A+B - 7.java │ │ └── README.md │ ├── 11050. 이항 계수 1 │ │ ├── README.md │ │ └── 이항 계수 1.java │ ├── 1110. 더하기 사이클 │ │ ├── README.md │ │ └── 더하기 사이클.java │ ├── 11382. 꼬마 정민 │ │ ├── README.md │ │ └── 꼬마 정민.java │ ├── 1152. 단어의 개수 │ │ ├── README.md │ │ └── 단어의 개수.java │ ├── 1157. 단어 공부 │ │ ├── README.md │ │ └── 단어 공부.java │ ├── 11653. 소인수분해 │ │ ├── README.md │ │ └── 소인수분해.java │ ├── 11654. 아스키 코드 │ │ ├── README.md │ │ └── 아스키 코드.java │ ├── 11718. 그대로 출력하기 │ │ ├── README.md │ │ └── 그대로 출력하기.java │ ├── 11720. 숫자의 합 │ │ ├── README.md │ │ └── 숫자의 합.java │ ├── 13458. 시험 감독 │ │ ├── README.md │ │ └── 시험 감독.java │ ├── 14215. 세 막대 │ │ ├── README.md │ │ └── 세 막대.java │ ├── 15439. 베라의 패션 │ │ ├── README.md │ │ └── 베라의 패션.java │ ├── 1546. 평균 │ │ ├── README.md │ │ └── 평균.java │ ├── 15552. 빠른 A+B │ │ ├── README.md │ │ └── 빠른 A+B.java │ ├── 18108. 1998년생인 내가 태국에서는 2541년생?! │ │ ├── 1998년생인 내가 태국에서는 2541년생?!.java │ │ └── README.md │ ├── 1934. 최소공배수 │ │ ├── README.md │ │ └── 최소공배수.java │ ├── 19532. 수학은 비대면강의입니다 │ │ ├── README.md │ │ └── 수학은 비대면강의입니다.java │ ├── 1978. 소수 찾기 │ │ ├── README.md │ │ └── 소수 찾기.java │ ├── 20492. 세금 │ │ ├── README.md │ │ └── 세금.java │ ├── 2292. 벌집 │ │ ├── README.md │ │ └── 벌집.java │ ├── 2438. 별 찍기 - 1 │ │ ├── README.md │ │ └── 별 찍기 - 1.java │ ├── 2439. 별 찍기 - 2 │ │ ├── README.md │ │ └── 별 찍기 - 2.java │ ├── 2444. 별 찍기 - 7 │ │ ├── README.md │ │ └── 별 찍기 - 7.java │ ├── 24723. 녹색거탑 │ │ ├── README.md │ │ └── 녹색거탑.java │ ├── 2475. 검증수 │ │ ├── README.md │ │ └── 검증수.java │ ├── 2480. 주사위 세개 │ │ ├── README.md │ │ └── 주사위 세개.java │ ├── 2501. 약수 구하기 │ │ ├── README.md │ │ └── 약수 구하기.java │ ├── 25024. 시간과 날짜 │ │ ├── README.md │ │ └── 시간과 날짜.java │ ├── 25083. 새싹 │ │ ├── README.md │ │ └── 새싹.java │ ├── 2525. 오븐 시계 │ │ ├── README.md │ │ └── 오븐 시계.java │ ├── 25304. 영수증 │ │ ├── README.md │ │ └── 영수증.java │ ├── 25314. 코딩은 체육과목 입니다 │ │ ├── README.md │ │ └── 코딩은 체육과목 입니다.java │ ├── 25501. 재귀의 귀재 │ │ ├── README.md │ │ └── 재귀의 귀재.java │ ├── 2566. 최댓값 │ │ ├── README.md │ │ └── 최댓값.java │ ├── 2581. 소수 │ │ ├── README.md │ │ └── 소수.java │ ├── 2587. 대표값2 │ │ ├── README.md │ │ └── 대표값2.java │ ├── 2605. 줄 세우기 │ │ ├── README.md │ │ └── 줄 세우기.java │ ├── 2675. 문자열 반복 │ │ ├── README.md │ │ └── 문자열 반복.java │ ├── 27323. 직사각형 │ │ ├── README.md │ │ └── 직사각형.java │ ├── 2738. 행렬 덧셈 │ │ ├── README.md │ │ └── 행렬 덧셈.java │ ├── 2739. 구구단 │ │ ├── README.md │ │ └── 구구단.java │ ├── 2741. N 찍기 │ │ ├── N 찍기.java │ │ └── README.md │ ├── 2743. 단어 길이 재기 │ │ ├── README.md │ │ └── 단어 길이 재기.java │ ├── 27433. 팩토리얼 2 │ │ ├── README.md │ │ └── 팩토리얼 2.java │ ├── 2745. 진법 변환 │ │ ├── README.md │ │ └── 진법 변환.java │ ├── 2747. 피보나치 수 │ │ ├── README.md │ │ └── 피보나치 수.java │ ├── 2750. 수 정렬하기 │ │ ├── README.md │ │ └── 수 정렬하기.java │ ├── 2869. 달팽이는 올라가고 싶다 │ │ ├── README.md │ │ └── 달팽이는 올라가고 싶다.java │ ├── 2884. 알람 시계 │ │ ├── README.md │ │ └── 알람 시계.java │ ├── 2903. 중앙 이동 알고리즘 │ │ ├── README.md │ │ └── 중앙 이동 알고리즘.java │ ├── 3003. 킹, 퀸, 룩, 비숍, 나이트, 폰 │ │ ├── README.md │ │ └── 킹, 퀸, 룩, 비숍, 나이트, 폰.java │ ├── 3009. 네 번째 점 │ │ ├── README.md │ │ └── 네 번째 점.java │ ├── 3052. 나머지 │ │ ├── README.md │ │ └── 나머지.java │ ├── 4344. 평균은 넘겠지 │ │ ├── README.md │ │ └── 평균은 넘겠지.java │ ├── 5073. 삼각형과 세 변 │ │ ├── README.md │ │ └── 삼각형과 세 변.java │ ├── 5086. 배수와 약수 │ │ ├── README.md │ │ └── 배수와 약수.java │ ├── 8393. 합 │ │ ├── README.md │ │ └── 합.java │ ├── 8958. OX퀴즈 │ │ ├── OX퀴즈.kt │ │ └── README.md │ ├── 9063. 대지 │ │ ├── README.md │ │ └── 대지.java │ └── 9506. 약수들의 합 │ │ ├── README.md │ │ └── 약수들의 합.java ├── Gold │ ├── 14499. 주사위 굴리기 │ │ ├── README.md │ │ └── 주사위 굴리기.java │ ├── 15486. 퇴사 2 │ │ ├── README.md │ │ └── 퇴사 2.java │ ├── 17298. 오큰수 │ │ ├── README.md │ │ └── 오큰수.java │ ├── 17299. 오등큰수 │ │ ├── README.md │ │ └── 오등큰수.java │ └── 9935. 문자열 폭발 │ │ ├── README.md │ │ └── 문자열 폭발.java ├── Silver │ ├── 1010. 다리 놓기 │ │ ├── README.md │ │ └── 다리 놓기.java │ ├── 1018. 체스판 다시 칠하기 │ │ ├── README.md │ │ └── 체스판 다시 칠하기.java │ ├── 1065. 한수 │ │ ├── README.md │ │ └── 한수.java │ ├── 10773. 제로 │ │ ├── README.md │ │ ├── 제로.java │ │ └── 제로.py │ ├── 10815. 숫자 카드 │ │ ├── README.md │ │ └── 숫자 카드.java │ ├── 10816. 숫자 카드 2 │ │ ├── README.md │ │ └── 숫자 카드 2.java │ ├── 10828. 스택 │ │ ├── README.md │ │ └── 스택.py │ ├── 10866. 덱 │ │ ├── README.md │ │ └── 덱.java │ ├── 11279. 최대 힙 │ │ ├── README.md │ │ └── 최대 힙.java │ ├── 11286. 절댓값 힙 │ │ ├── README.md │ │ └── 절댓값 힙.java │ ├── 11478. 서로 다른 부분 문자열의 개수 │ │ ├── README.md │ │ └── 서로 다른 부분 문자열의 개수.java │ ├── 1158. 요세푸스 문제 │ │ ├── README.md │ │ └── 요세푸스 문제.py │ ├── 11650. 좌표 정렬하기 │ │ ├── README.md │ │ └── 좌표 정렬하기.java │ ├── 11651. 좌표 정렬하기 2 │ │ ├── README.md │ │ └── 좌표 정렬하기 2.java │ ├── 11726. 2×n 타일링 │ │ ├── 2×n 타일링.java │ │ └── README.md │ ├── 11729. 하노이 탑 이동 순서 │ │ ├── README.md │ │ └── 하노이 탑 이동 순서.java │ ├── 11866. 요세푸스 문제 0 │ │ ├── README.md │ │ └── 요세푸스 문제 0.java │ ├── 1193. 분수찾기 │ │ ├── README.md │ │ └── 분수찾기.java │ ├── 1269. 대칭 차집합 │ │ ├── README.md │ │ └── 대칭 차집합.java │ ├── 12789. 도키도키 간식드리미 │ │ ├── README.md │ │ └── 도키도키 간식드리미.java │ ├── 1316. 그룹 단어 체커 │ │ ├── README.md │ │ └── 그룹 단어 체커.java │ ├── 13241. 최소공배수 │ │ ├── README.md │ │ └── 최소공배수.java │ ├── 13335. 트럭 │ │ ├── README.md │ │ └── 트럭.java │ ├── 13909. 창문 닫기 │ │ ├── README.md │ │ └── 창문 닫기.java │ ├── 1406. 에디터 │ │ ├── README.md │ │ └── 에디터.java │ ├── 1436. 영화감독 숌 │ │ ├── README.md │ │ └── 영화감독 숌.java │ ├── 14425. 문자열 집합 │ │ ├── README.md │ │ └── 문자열 집합.java │ ├── 1446. 지름길 │ │ ├── README.md │ │ └── 지름길.java │ ├── 14501. 퇴사 │ │ ├── README.md │ │ └── 퇴사.java │ ├── 14888. 연산자 끼워넣기 │ │ ├── README.md │ │ └── 연산자 끼워넣기.java │ ├── 15649. N과 M (1) │ │ ├── N과 M (1).java │ │ └── README.md │ ├── 15650. N과 M (2) │ │ ├── N과 M (2).java │ │ └── README.md │ ├── 15651. N과 M (3) │ │ ├── N과 M (3).java │ │ └── README.md │ ├── 15652. N과 M (4) │ │ ├── N과 M (4).java │ │ └── README.md │ ├── 1620. 나는야 포켓몬 마스터 이다솜 │ │ ├── README.md │ │ └── 나는야 포켓몬 마스터 이다솜.java │ ├── 17103. 골드바흐 파티션 │ │ ├── README.md │ │ └── 골드바흐 파티션.java │ ├── 1735. 분수 합 │ │ ├── README.md │ │ └── 분수 합.java │ ├── 17478. 재귀함수가 뭔가요? │ │ ├── README.md │ │ └── 재귀함수가 뭔가요?.java │ ├── 1764. 듣보잡 │ │ ├── README.md │ │ └── 듣보잡.java │ ├── 18258. 큐 2 │ │ ├── README.md │ │ └── 큐 2.java │ ├── 18870. 좌표 압축 │ │ ├── README.md │ │ └── 좌표 압축.java │ ├── 1904. 01타일 │ │ ├── 01타일.java │ │ └── README.md │ ├── 1920. 수 찾기 │ │ ├── README.md │ │ └── 수 찾기.java │ ├── 1927. 최소 힙 │ │ ├── README.md │ │ └── 최소 힙.java │ ├── 1929. 소수 구하기 │ │ ├── README.md │ │ └── 소수 구하기.java │ ├── 20920. 영단어 암기는 괴로워 │ │ ├── README.md │ │ └── 영단어 암기는 괴로워.java │ ├── 2164. 카드2 │ │ ├── README.md │ │ └── 카드2.java │ ├── 2346. 풍선 터뜨리기 │ │ ├── README.md │ │ └── 풍선 터뜨리기.java │ ├── 24511. queuestack │ │ ├── README.md │ │ └── queuestack.java │ ├── 2485. 가로수 │ │ ├── README.md │ │ └── 가로수.java │ ├── 25192. 인사성 밝은 곰곰이 │ │ ├── README.md │ │ └── 인사성 밝은 곰곰이.java │ ├── 25206. 너의 평점은 │ │ ├── README.md │ │ └── 너의 평점은.java │ ├── 2559. 수열 │ │ ├── README.md │ │ └── 수열.java │ ├── 2563. 색종이 │ │ ├── README.md │ │ └── 색종이.java │ ├── 2740. 행렬 곱셈 │ │ ├── README.md │ │ └── 행렬 곱셈.java │ ├── 2751. 수 정렬하기 2 │ │ ├── README.md │ │ └── 수 정렬하기 2.java │ ├── 2822. 점수 계산 │ │ ├── README.md │ │ └── 점수 계산.java │ ├── 28278. 스택 2 │ │ ├── README.md │ │ └── 스택 2.java │ ├── 28279. 덱 2 │ │ ├── README.md │ │ └── 덱 2.java │ ├── 2839. 설탕 배달 │ │ ├── README.md │ │ └── 설탕 배달.java │ ├── 2841. 외계인의 기타 연주 │ │ ├── README.md │ │ └── 외계인의 기타 연주.java │ ├── 2941. 크로아티아 알파벳 │ │ ├── README.md │ │ └── 크로아티아 알파벳.java │ ├── 4134. 다음 소수 │ │ ├── README.md │ │ └── 다음 소수.java │ ├── 4358. 생태학 │ │ ├── README.md │ │ └── 생태학.java │ ├── 4673. 셀프 넘버 │ │ ├── README.md │ │ └── 셀프 넘버.java │ ├── 4779. 칸토어 집합 │ │ ├── README.md │ │ └── 칸토어 집합.java │ ├── 4948. 베르트랑 공준 │ │ ├── README.md │ │ └── 베르트랑 공준.java │ ├── 4949. 균형잡힌 세상 │ │ ├── README.md │ │ └── 균형잡힌 세상.java │ ├── 5397. 키로거 │ │ ├── README.md │ │ └── 키로거.java │ ├── 7785. 회사에 있는 사람 │ │ ├── README.md │ │ └── 회사에 있는 사람.java │ └── 9461. 파도반 수열 │ │ ├── README.md │ │ └── 파도반 수열.java └── Unrated │ └── 10930. SHA-256 │ ├── README.md │ └── SHA-256.java └── 프로그래머스 ├── lv1 └── 64061. 크레인 인형뽑기 게임 │ ├── README.md │ ├── 크레인 인형뽑기 게임.java │ └── 크레인 인형뽑기 게임.py └── lv2 └── 12939. 최댓값과 최솟값 ├── README.md └── 최댓값과 최솟값.java /JE/10주차/MidCharacter.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | answer = '' 3 | mid = len(s) // 2 4 | 5 | if len(s) % 2 != 0: 6 | return s[mid] 7 | 8 | else: 9 | return s[mid - 1 : mid + 1] -------------------------------------------------------------------------------- /JE/10주차/ShortestDistance.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | def solution(maps): 4 | dx = [1, -1, 0, 0] 5 | dy = [0, 0, 1, -1] 6 | n = len(maps) 7 | m = len(maps[0]) 8 | 9 | q = deque() 10 | q.append((0, 0)) 11 | 12 | while q: 13 | cur = q.popleft() 14 | 15 | for i in range(4): 16 | x = dx[i] + cur[0] 17 | y = dy[i] + cur[1] 18 | 19 | if 0 <= x < n and 0 <= y < m and maps[x][y] == 1: 20 | q.append((x, y)) 21 | maps[x][y] = maps[cur[0]][cur[1]] + 1 22 | 23 | if maps[-1][-1] > 1: 24 | return maps[-1][-1] 25 | else: 26 | return -1 27 | -------------------------------------------------------------------------------- /JE/11주차/JoyStick.py: -------------------------------------------------------------------------------- 1 | def solution(name): 2 | answer = 0 3 | move = len(name) - 1 # 앞에서부터 가다가 다시 A를 만났을 때 거꾸로 가기 위한 변수 4 | next = 0 5 | 6 | for i, char in enumerate(name): 7 | startA = ord(char) - ord('A') 8 | startZ = ord('Z') - ord(char) + 1 9 | 10 | answer += min(startA, startZ) # 맨앞, 맨뒤 어느쪽이 더 가까운지를 판별 11 | 12 | next += 1 # 다음 문자열 비교를 위해 인덱스 이동 13 | 14 | while next < len(name) and name[next] == 'A': # 잘 가다가 A를 만나게 될 경우 연속되는 A의 마지막값저장 15 | next += 1 16 | 17 | back = i + i + len(name) - next 18 | 19 | if move > back: # 뒤에서 카운팅이 더 짧을 경우 그 수를 move에 저장 20 | move = back 21 | 22 | answer += move 23 | 24 | return answer -------------------------------------------------------------------------------- /JE/11주차/NoSameNumbers.py: -------------------------------------------------------------------------------- 1 | def solution(arr): 2 | answer = [] 3 | 4 | answer.append(arr[0]) 5 | 6 | for i in range(1, len(arr)): 7 | if arr[i] != answer[-1]: 8 | answer.append(arr[i]) 9 | 10 | return answer -------------------------------------------------------------------------------- /JE/11주차/NumbersAndCharacter.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | answer = '' 3 | check = '' 4 | numbers = {'zero':'0', 5 | 'one':'1', 6 | 'two':'2', 7 | 'three':'3', 8 | 'four':'4', 9 | 'five':'5', 10 | 'six':'6', 11 | 'seven':'7', 12 | 'eight':'8', 13 | 'nine':'9'} 14 | 15 | for i in s: 16 | if i.isalpha(): 17 | check += i 18 | 19 | if numbers.get(check): 20 | answer += numbers[check] 21 | check = '' 22 | 23 | else: 24 | answer += i 25 | 26 | return int(answer) -------------------------------------------------------------------------------- /JE/13주차/MyCharacter.py: -------------------------------------------------------------------------------- 1 | def solution(strings, n): 2 | answer = [] 3 | 4 | answer = sorted(sorted(strings), key=lambda x:x[n]) 5 | 6 | return answer -------------------------------------------------------------------------------- /JE/16주차/BiggestNumber.py: -------------------------------------------------------------------------------- 1 | def solution(numbers): 2 | answer = '' 3 | numbers = list(map(str, numbers)) 4 | numbers.sort(key = lambda x : x*3, reverse=True) 5 | 6 | answer = ''.join(numbers) 7 | return answer -------------------------------------------------------------------------------- /JE/16주차/WeirdCharacter.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | answer = [] 3 | s = s.split(' ') 4 | 5 | for word in range(len(s)): 6 | change = '' 7 | 8 | for idx in range(len(s[word])): 9 | if idx % 2 == 0: 10 | change += s[word][idx].upper() 11 | else: 12 | change += s[word][idx].lower() 13 | 14 | answer.append(change) 15 | 16 | return ' '.join(answer) -------------------------------------------------------------------------------- /JE/17주차/DiskControllers.py: -------------------------------------------------------------------------------- 1 | import heapq 2 | 3 | def solution(jobs): 4 | answer, now, i = 0, 0, 0 5 | start = -1 6 | heap = [] 7 | 8 | while i < len(jobs): 9 | for j in jobs: 10 | if start < j[0] <= now: 11 | heapq.heappush(heap, [j[1], j[0]]) 12 | 13 | if len(heap) > 0: 14 | cur = heapq.heappop(heap) 15 | start = now 16 | now += cur[0] 17 | answer += now - cur[1] 18 | i +=1 19 | else: 20 | now += 1 21 | 22 | return answer // len(jobs) -------------------------------------------------------------------------------- /JE/17주차/MakingStars.py: -------------------------------------------------------------------------------- 1 | a, b = map(int, input().strip().split(' ')) 2 | 3 | print(('*' * a + '\n') * b) -------------------------------------------------------------------------------- /JE/17주차/StockPrices.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | 3 | def solution(prices): 4 | answer = [] 5 | quePrice = deque(prices) 6 | 7 | while quePrice: 8 | price = quePrice.popleft() 9 | time = 0 10 | 11 | for i in quePrice: 12 | time += 1 13 | if price > i: 14 | break 15 | 16 | answer.append(time) 17 | 18 | return answer -------------------------------------------------------------------------------- /JE/18주차/MaskingPhoneNumber.py: -------------------------------------------------------------------------------- 1 | def solution(phone_number): 2 | answer = '' 3 | 4 | phone_number = str(phone_number) 5 | if len(phone_number) >= 4 and len(phone_number) <= 20: 6 | for i in range(0, len(phone_number) - 4): 7 | answer += phone_number[i].replace(phone_number[i], "*") 8 | 9 | leftChr = phone_number[-4:] 10 | answer += leftChr 11 | 12 | return answer -------------------------------------------------------------------------------- /JE/18주차/MultiplyColRow.py: -------------------------------------------------------------------------------- 1 | def solution(arr1, arr2): 2 | # answer의 배열크기 0으로 초기화 3 | answer = [[0 for _ in range(len(arr2[0]))] for _ in range(len(arr1))] 4 | 5 | for i in range(len(arr1)): # arr1 배열 크기만큼 6 | for j in range(len(arr2[0])): # arr2 2차원 배열 내 1번째 배열 7 | for k in range(len(arr1[0])): # arr1 배열 내 1번째 배열 8 | answer[i][j] += (arr1[i][k] * arr2[k][j]) 9 | 10 | return answer -------------------------------------------------------------------------------- /JE/18주차/NumberExpression.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = 0 3 | for i in range(1, n+1): 4 | result = 0 5 | for j in range(i, n+1): 6 | result += j 7 | if result == n: 8 | answer += 1 9 | break 10 | if result > n: 11 | break 12 | return answer -------------------------------------------------------------------------------- /JE/1주차/Country124Numbers.py: -------------------------------------------------------------------------------- 1 | def solution(quo): 2 | answer = '' 3 | 4 | while quo > 0: 5 | quo, re = divmod(quo, 3) 6 | 7 | if re == 0: 8 | quo -= 1 9 | answer += '4' 10 | 11 | else: 12 | answer += str(re) 13 | 14 | answer = answer[::-1] 15 | 16 | return answer -------------------------------------------------------------------------------- /JE/1주차/PhoneKetMon.py: -------------------------------------------------------------------------------- 1 | def solution(nums): 2 | answer = 0 3 | 4 | pick = len(nums) / 2 5 | setNums = set(nums) 6 | lengthSetNums = len(setNums) 7 | 8 | if lengthSetNums > pick: 9 | answer = pick 10 | 11 | else: 12 | answer = lengthSetNums 13 | 14 | return answer -------------------------------------------------------------------------------- /JE/1주차/PlayerNotCompleted.py: -------------------------------------------------------------------------------- 1 | def solution(participant, completion): 2 | participant.sort() 3 | completion.sort() 4 | 5 | for player, complete in zip(participant, completion): 6 | if player != complete: 7 | return player 8 | 9 | return participant.pop() -------------------------------------------------------------------------------- /JE/2주차/GymSuit.py: -------------------------------------------------------------------------------- 1 | # 모든 테스트 케이스 통과 2 | def solution(n, lost, reserve): 3 | answer = 0 4 | 5 | # 이 for문이 없으면 안됨 6 | for i in reserve: 7 | if i in lost: 8 | lost.remove(i) 9 | reserve.remove(i) 10 | 11 | answer = n - len(lost) 12 | 13 | for i in lost: 14 | if i in reserve: 15 | reserve.remove(i) 16 | answer += 1 17 | 18 | elif i-1 in reserve: 19 | reserve.remove(i-1) 20 | answer += 1 21 | 22 | elif i+1 in reserve: 23 | reserve.remove(i+1) 24 | answer += 1 25 | 26 | return answer -------------------------------------------------------------------------------- /JE/2주차/NumberK.py: -------------------------------------------------------------------------------- 1 | def solution(array, commands): 2 | answer = [] 3 | 4 | for i in range(len(commands)): 5 | cut = array[commands[i][0]-1 : commands[i][1]] 6 | cut.sort() 7 | answer.append(cut[commands[i][2] - 1]) 8 | 9 | return answer -------------------------------------------------------------------------------- /JE/2주차/Square.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | def solution(w,h): 4 | answer = 1 5 | total = w * h 6 | noUse = w + h - math.gcd(w, h) 7 | 8 | answer = total - noUse 9 | 10 | return answer -------------------------------------------------------------------------------- /JE/3주차/AddYinYang.py: -------------------------------------------------------------------------------- 1 | def solution(absolutes, signs): 2 | answer = 0 3 | result = [] 4 | 5 | for num, sign in zip(absolutes, signs): 6 | if sign : 7 | result.append(num) 8 | 9 | else: 10 | result.append(num * -1) 11 | 12 | answer = sum(result) 13 | return answer -------------------------------------------------------------------------------- /JE/3주차/MakePrimeNumber.py: -------------------------------------------------------------------------------- 1 | import itertools 2 | 3 | 4 | def solution(nums): 5 | answer = 0 6 | numsList = list(itertools.combinations(nums, 3)) 7 | 8 | for i in numsList: 9 | check = sum(i) 10 | result = isPrime(check) 11 | 12 | if result: 13 | answer += 1 14 | 15 | return answer 16 | 17 | 18 | def isPrime(sumOfNums): 19 | for i in range(2, sumOfNums): 20 | if sumOfNums % i == 0: 21 | break 22 | else: 23 | return True 24 | -------------------------------------------------------------------------------- /JE/3주차/RemovePairs.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | stack = [] 3 | 4 | for i in s: 5 | if stack: 6 | if stack[-1] == i: 7 | stack.pop() 8 | else: 9 | stack.append(i) 10 | else: 11 | stack.append(i) 12 | 13 | if stack: 14 | return 0 15 | else: 16 | return 1 17 | -------------------------------------------------------------------------------- /JE/4주차/DotProduct.py: -------------------------------------------------------------------------------- 1 | def solution(a, b): 2 | answer = 0 3 | 4 | for aNum, bNum in zip(a, b): 5 | answer += (aNum * bNum) 6 | 7 | return answer -------------------------------------------------------------------------------- /JE/4주차/PickDoll.py: -------------------------------------------------------------------------------- 1 | def solution(board, moves): 2 | answer = [] 3 | bucket = [] 4 | 5 | for move in moves: 6 | for j in range(len(board)): 7 | if board[j][move-1] != 0: 8 | bucket.append(board[j][move-1]) 9 | board[j][move-1] = 0 # 뽑은 인형자리는 다시 찾지않도록 0으로 설정 10 | 11 | if bucket[-1:] == bucket[-2:-1]: # 제일 마지막으로 들어온 값과 그 이전값이 같다면 answer에 넣어줌 12 | answer += bucket[-1:] 13 | bucket = bucket[:-2] 14 | break 15 | 16 | return len(answer) * 2 -------------------------------------------------------------------------------- /JE/5주차/Spicy.py: -------------------------------------------------------------------------------- 1 | import heapq 2 | 3 | def solution(scoville, K): 4 | answer = 0 5 | 6 | heapq.heapify(scoville) 7 | 8 | while len(scoville) >= 2 and scoville[0] < K: 9 | scovilleRate = heapq.heappop(scoville) + (heapq.heappop(scoville) * 2) 10 | heapq.heappush(scoville, scovilleRate) 11 | answer += 1 12 | 13 | if scoville[0] >= K: 14 | return answer 15 | else: 16 | return -1 -------------------------------------------------------------------------------- /JE/6주차/Budget.py: -------------------------------------------------------------------------------- 1 | def solution(d, budget): 2 | answer = 0 3 | check = 0 4 | 5 | d.sort() 6 | 7 | if sum(d) <= budget: 8 | return answer + len(d) 9 | 10 | else: 11 | for i in d: 12 | check += i 13 | if check <= budget: 14 | answer += 1 15 | else: 16 | break 17 | 18 | return answer -------------------------------------------------------------------------------- /JE/6주차/OpenChat.py: -------------------------------------------------------------------------------- 1 | def solution(record): 2 | answer =[] 3 | users = {} 4 | 5 | logs = [list(i.split()) for i in record] 6 | 7 | for i in record: 8 | recordList = i.split(' ') 9 | 10 | if recordList[0] != 'Leave': 11 | users[recordList[1]] = recordList[2] # 제일 마지막 아이디의 닉네임이 들어감 12 | 13 | for command in logs: 14 | 15 | if command[0] == 'Enter': 16 | answer.append(users[command[1]] + "님이 들어왔습니다.") 17 | elif command[0] == 'Leave': 18 | answer.append(users[command[1]] + "님이 나갔습니다.") 19 | 20 | return answer -------------------------------------------------------------------------------- /JE/7주차/FailRate.py: -------------------------------------------------------------------------------- 1 | def solution(N, stages): 2 | answer = [] 3 | length = len(stages) 4 | result = {} 5 | 6 | for stage in range(1, N + 1): 7 | if length != 0: 8 | fail = stages.count(stage) 9 | result[stage] = fail / length 10 | length -= fail 11 | else: 12 | result[stage] = 0 13 | 14 | answer = sorted(result, key = lambda x: result[x], reverse = True) 15 | 16 | return answer -------------------------------------------------------------------------------- /JE/7주차/FindDivisor.py: -------------------------------------------------------------------------------- 1 | def solution(left, right): 2 | answer = 0 3 | check = [] 4 | numbers = [i for i in range(left, right + 1)] 5 | 6 | for i in numbers: 7 | for n in range(1, i + 1): 8 | if i % n == 0: 9 | check.append(n) 10 | 11 | if len(check) % 2 == 0: 12 | answer += i 13 | check.clear() 14 | else: 15 | answer -= i 16 | check.clear() 17 | 18 | return answer -------------------------------------------------------------------------------- /JE/7주차/ZipString.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | answer = [] 3 | result = "" 4 | 5 | if len(s) == 1: # 문자열 길이 1은 무조건 1 리턴 6 | return 1 7 | 8 | for cut in range(1, len(s) // 2 + 1): # 절반까지만 확인하면 됨 9 | count = 1 10 | check = s[:cut] 11 | for i in range(cut, len(s), cut): 12 | if s[i:i+cut] == check: # 다음 문자열과 같다면 13 | count += 1 14 | else: # 다음 문자열과 다를 경우 15 | if count == 1: 16 | count = '' 17 | result += str(count) + check # 여태까지 세어진 숫자와 문자열을 이어붙이기 18 | check = s[i:i+cut] # 다음 비교대상 19 | count = 1 # 카운트는 1로 초기화 20 | 21 | if count == 1: # 카운트1개는 숫자를 이어붙이지 않음 22 | count = '' 23 | 24 | # 카운트가 1보다 클 경우 25 | result += str(count) + check 26 | answer.append(len(result)) 27 | result = '' 28 | 29 | return min(answer) -------------------------------------------------------------------------------- /JE/8주차/ChooseTwoNums.py: -------------------------------------------------------------------------------- 1 | from itertools import combinations 2 | 3 | def solution(numbers): 4 | answer = [] 5 | 6 | for i, j in combinations(numbers, 2): 7 | answer.append(i + j) 8 | 9 | return sorted(set(answer)) -------------------------------------------------------------------------------- /JE/8주차/ReverseTernary.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = '' 3 | 4 | while n > 0: 5 | n, r = divmod(n, 3) 6 | answer += str(r) 7 | 8 | return int(answer, 3) -------------------------------------------------------------------------------- /JE/8주차/TargetNumber.py: -------------------------------------------------------------------------------- 1 | def solution(numbers, target): 2 | answer = [0] 3 | 4 | for i in range(len(numbers)): 5 | tmp = [] 6 | 7 | for j in answer: 8 | tmp.append(j+numbers[i]) 9 | tmp.append(j-numbers[i]) 10 | 11 | answer = tmp 12 | 13 | return answer.count(target) -------------------------------------------------------------------------------- /JE/9주차/Date.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | 3 | # datetime 라이브러리를 사용하여 해당 연,월,일의 요일값을 day라는 배열안에서 찾음 4 | def solution(m, d): 5 | day = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"] 6 | return day[datetime.date(2016, m, d).weekday()] -------------------------------------------------------------------------------- /JE/9주차/FindPrime.py: -------------------------------------------------------------------------------- 1 | from itertools import permutations 2 | 3 | def solution(numbers): 4 | answer = 0 5 | 6 | numList = [i for i in numbers] 7 | nums = [] 8 | 9 | # 모든 경우의 수를 구하기(앞자리 0인 것은 제외됨) 10 | for i in range(1, len(numbers) + 1): 11 | for j in list(permutations(numList, i)): 12 | 13 | if ''.join(j).startswith('0'): 14 | continue 15 | else: 16 | nums.append(''.join(j)) 17 | 18 | # 중복이 나올 수 있기 때문에 중복 제거 후 리스트로 변환 19 | nums = list(set(nums)) 20 | 21 | # 소수 판별하기, isPrime()으로 True가 나오는 숫자가 있을 경우 카운트 22 | for i in nums: 23 | result = isPrime(int(i)) 24 | 25 | if result == True: 26 | answer += 1 27 | 28 | return answer 29 | 30 | def isPrime(n): 31 | if(n < 2): 32 | return False 33 | 34 | for i in range(2, n): 35 | if(n % i==0): 36 | return False 37 | 38 | return True -------------------------------------------------------------------------------- /JE/9주차/SecretMap.py: -------------------------------------------------------------------------------- 1 | def solution(n, arr1, arr2): 2 | answer = [] 3 | 4 | for i in range(n): 5 | # 2진수로 변환하는 방법, str로 처리됨 6 | arr1[i] = format(arr1[i], 'b') 7 | arr2[i] = format(arr2[i], 'b') 8 | 9 | # 변환된 2진수가 n의 길이보다 짧을경우에는 0으로 채워준다 10 | arr1[i] = ('0' * (n - len(arr1[i]))) + arr1[i] 11 | arr2[i] = ('0' * (n - len(arr2[i]))) + arr2[i] 12 | 13 | pattern = "" 14 | 15 | for j in range(n): # 이렇게 해줘야 str내 숫자를 1개씩 가져옴 ex) arr1[0]: 01001 / arr1[0][0]: 01001 중 0을 가져옴 16 | if arr1[i][j] == '1' or arr2[i][j] == '1': 17 | pattern += '#' 18 | 19 | else: 20 | pattern += ' ' 21 | 22 | answer.append(pattern) 23 | return answer -------------------------------------------------------------------------------- /JE/README.md: -------------------------------------------------------------------------------- 1 | ## 🐰 [Lee JE](https://github.com/jane096) 2 | 3 |
4 | 5 | ## 📅 Week 6 | 7 | |주차|문제1|문제2|문제3| 8 | |:-----:|:-----:|:-----:|:-----:| 9 | |1주차(210503~)|[124 나라의 숫자](https://programmers.co.kr/learn/courses/30/lessons/12899)|[멀쩡한 사각형](https://programmers.co.kr/learn/courses/30/lessons/62048)|[오픈채팅방](https://programmers.co.kr/learn/courses/30/lessons/42888)| 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🔥 CodingTestStudy 🔥 2 | 3 | ## 🌈 진행방식 4 | 5 | - 주 3회 이상 푸는 것을 목표로 합니다. 6 | - 언어는 Python 또는 Java를 이용합니다. 7 | - 문제는 [백준](https://www.acmicpc.net/), [Programmers](https://programmers.co.kr/), [SW Expert Academy](https://swexpertacademy.com/main/main.do)의 문제를 풉니다. 8 | 9 |
10 | 11 | ## 🚀 규칙 12 | 13 | - 크롬에서 [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub) 설치 후 백준, 프로그래머스, SW Expert Academy의 문제를 풉니다. 14 | 15 |
16 | 17 | ## 🙋 참가자 18 | 19 | - 🐍 [YoonJeong](https://github.com/Yo0oN) 20 | 21 |
22 | 23 | > 2022-06-23 새로운 규칙으로 변경하였습니다. 24 | -------------------------------------------------------------------------------- /YoonJeong/001주차/124나라의 숫자.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = '' 3 | 4 | # 10진수를 3진수로 바꾸는 방법을 이용합니다. 5 | while n > 0 : 6 | remainder = n % 3 7 | n = n // 3 8 | 9 | # 3진수에서는 0, 1, 2를 하고, 첫자리에 0이 올 수 없습니다. 하지만 124나라에는 0이 없으며, 0을 대신하는 4가 첫자리에 올 수 있습니다. 10 | # 3진수를 이용하는 방법은 나머지가 0이 나올떄 문제가 생기는데, 나머지가 0이 나오면 나온 몫에서 -1해주면됩니다. 11 | if remainder == 0 : 12 | n -= 1 13 | answer = '4' + answer 14 | else : 15 | answer = str(remainder) + answer 16 | 17 | return answer 18 | -------------------------------------------------------------------------------- /YoonJeong/001주차/완주하지못한선수.py: -------------------------------------------------------------------------------- 1 | def solution(participant, completion): 2 | answer = '' 3 | participant.sort() 4 | completion.sort() 5 | 6 | for i in range(len(participant)) : 7 | # 만약 참가자 배열의 마지막인 경우 마지막 값이 완주하지 못한 선수 8 | if i == len(participant) : 9 | answer = participant[i] 10 | break 11 | # 만약 참가자와 완주자가 다를 경우 해당 값이 완주하지 못한 선수 12 | if participant[i] != completion[i] : 13 | answer = participant[i] 14 | break 15 | 16 | return answer 17 | -------------------------------------------------------------------------------- /YoonJeong/001주차/폰켓몬.py: -------------------------------------------------------------------------------- 1 | def solution(nums): 2 | answer = 0 3 | 4 | # set에 넣어 몇 종류의 폰켓몬이 있는지 구한다. 5 | lenOfNumsSet = len(set(nums)) 6 | # 폰켓몬의 종류 수가 절반 이상이라면 가져가는 폰켓몬의 종류는 절반의 수와 같다. 7 | if lenOfNumsSet >= (len(nums) // 2) : 8 | answer = (len(nums) // 2) 9 | else : # 만약 절반 미만이라면 가져가는 폰켓몬의 종류수만큼만 고를 수 있다. 10 | answer = lenOfNumsSet 11 | 12 | return answer 13 | -------------------------------------------------------------------------------- /YoonJeong/002주차/K번째수.py: -------------------------------------------------------------------------------- 1 | def solution(array, commands): 2 | answer = [] 3 | 4 | for command in commands : 5 | i, j, k = command 6 | cutArray = sorted(array[i - 1 : j]) 7 | answer.append(cutArray[k - 1]) 8 | 9 | return answer 10 | -------------------------------------------------------------------------------- /YoonJeong/002주차/멀쩡한사각형.md: -------------------------------------------------------------------------------- 1 | from math import gcd 2 | 3 | def solution(w,h): 4 | return (w * h) - (w + h - gcd(w, h)) 5 | -------------------------------------------------------------------------------- /YoonJeong/003주차/음양더하기.py: -------------------------------------------------------------------------------- 1 | def solution(absolutes, signs): 2 | answer = 0 3 | 4 | for absolute, sign in zip(absolutes, signs) : 5 | if sign : 6 | answer += absolute 7 | else : 8 | answer -= absolute 9 | 10 | return answer 11 | -------------------------------------------------------------------------------- /YoonJeong/003주차/짝지어제거하기.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | answer = 0 3 | sStack = [] 4 | 5 | for i in s : 6 | if len(sStack) == 0 : 7 | sStack.append(i) 8 | 9 | elif sStack[-1] == i : 10 | sStack.pop() 11 | 12 | else : 13 | sStack.append(i) 14 | 15 | if len(sStack) == 0 : 16 | answer = 1 17 | 18 | return answer 19 | -------------------------------------------------------------------------------- /YoonJeong/004주차/기능개발.py: -------------------------------------------------------------------------------- 1 | def solution(progresses, speeds): 2 | answer = [] 3 | flag = 0 4 | 5 | while progresses : 6 | q, r = divmod((100 - progresses[0]), speeds[0]) 7 | 8 | if progresses[0] >= 100 : 9 | flag += 1 10 | progresses.pop(0) 11 | speeds.pop(0) 12 | continue 13 | elif r == 0: 14 | progresses = [i + (j * q) for i, j in zip(progresses, speeds)] 15 | else : 16 | progresses = [i + (j * (q + 1)) for i, j in zip(progresses, speeds)] 17 | 18 | if flag != 0 : 19 | answer.append(flag) 20 | flag = 0 21 | 22 | answer.append(flag) 23 | 24 | return answer 25 | -------------------------------------------------------------------------------- /YoonJeong/004주차/내적.py: -------------------------------------------------------------------------------- 1 | def solution(a, b): 2 | answer = 0 3 | 4 | for i, j in zip(a, b) : 5 | answer += i * j 6 | 7 | return answer 8 | -------------------------------------------------------------------------------- /YoonJeong/004주차/크레인인형뽑기게임.py: -------------------------------------------------------------------------------- 1 | def solution(board, moves): 2 | answer = 0 3 | stack = [] 4 | 5 | for m in moves : 6 | for i in range(len(board)) : 7 | if board[i][m - 1] == 0 : 8 | continue 9 | elif stack and board[i][m - 1] == stack[-1] : 10 | stack.pop() 11 | board[i][m - 1] = 0 12 | answer += 2 13 | break 14 | else : 15 | stack.append(board[i][m - 1]) 16 | board[i][m - 1] = 0 17 | break 18 | 19 | return answer 20 | -------------------------------------------------------------------------------- /YoonJeong/005주차/로또의최고순위와최저순위.py: -------------------------------------------------------------------------------- 1 | def solution(lottos, win_nums): 2 | answer = [] 3 | #맞은 개수 4 | same_nums = len([i for i in lottos if i in win_nums]) 5 | #0의 개수 6 | zero_nums = lottos.count(0) 7 | #등수가 적혀있는 배열. [6, 6, 5, 4, 3, 2, 1]로, 맞은 개수가 인덱스가되고, 값이 등수가 된다. 8 | rank = [i if i != 7 else 6 for i in range(7, 0, -1)] 9 | #최고순위 10 | answer.append(rank[same_nums + zero_nums]) 11 | #최저순위 12 | answer.append(rank[same_nums]) 13 | return answer 14 | -------------------------------------------------------------------------------- /YoonJeong/005주차/신규아이디추천.py: -------------------------------------------------------------------------------- 1 | def solution(new_id): 2 | # 1.소문자로 변경 3 | new_id = new_id.lower() 4 | 5 | # 2.특수문자 제거 6 | icon = '~!@#$%^&*()=+[{]}:?,<>/' 7 | new_id = [i for i in new_id if i not in icon] 8 | new_id = ''.join(new_id) 9 | 10 | # 3.'.' 중복시 제거 11 | while '..' in new_id : 12 | new_id = new_id.replace('..', '.') 13 | 14 | # 4.처음이나 끝에 오는 . 제거 15 | if new_id and new_id[0] == '.' : 16 | new_id = new_id[1:] 17 | if new_id and new_id[-1] == '.' : 18 | new_id = new_id[:-1] 19 | 20 | # 5.빈 문자열일 경우 a 대입 21 | if not new_id : 22 | new_id = 'a' 23 | 24 | # 6.16자 이상일 경우 뒤 생략 25 | if len(new_id) >= 16 : 26 | new_id = new_id[:15] 27 | if new_id[-1] == '.' : 28 | new_id = new_id[:-1] 29 | 30 | # 7.2자 이하일 경우 마지막 문자를 반복 31 | while len(new_id) <= 2 : 32 | new_id += new_id[-1] 33 | 34 | return new_id 35 | -------------------------------------------------------------------------------- /YoonJeong/006주차/예산.py: -------------------------------------------------------------------------------- 1 | #while 이용 2 | def solution(d, budget): 3 | answer = 0 4 | d.sort() 5 | while d and budget - d[0] >= 0 : 6 | budget -= d.pop(0) 7 | answer += 1 8 | return answer 9 | 10 | #for 이용 11 | def solution(d, budget): 12 | answer = 0 13 | d.sort() 14 | for i in d : 15 | budget -= i 16 | if budget < 0 : 17 | break 18 | else : 19 | answer += 1 20 | return answer 21 | -------------------------------------------------------------------------------- /YoonJeong/006주차/오픈채팅방.py: -------------------------------------------------------------------------------- 1 | def solution(record): 2 | answer = [] 3 | #3개의 단어로 구성된 문자열을 다시 배열로 분리 4 | record = [i.split() for i in record] 5 | #dictionary에 유저 아이디를 키, 닉네임을 값으로 하여 저장 6 | recordDict = {r[1] : r[2] for r in record if r[0] != 'Leave'} 7 | #들어왔을 때와 나갔을 때 문구를 다르게 하여 answer에 저장 8 | for r in record : 9 | if r[0] == 'Enter' : 10 | answer.append(recordDict[r[1]] + '님이 들어왔습니다.') 11 | elif r[0] == 'Leave' : 12 | answer.append(recordDict[r[1]] + '님이 나갔습니다.') 13 | 14 | return answer 15 | -------------------------------------------------------------------------------- /YoonJeong/007주차/실패율.py: -------------------------------------------------------------------------------- 1 | def solution(N, stages): 2 | stagePP = [stages.count(i) for i in range(1, N + 2)] 3 | people = len(stages) 4 | 5 | stageF = [] 6 | 7 | for n in range(N) : 8 | if people <= 0 : 9 | stageF.append([n, 0]) 10 | continue 11 | 12 | stageF.append([n, stagePP[n] / people]) 13 | people -= stagePP[n] 14 | 15 | stageF.sort(reverse = True, key = lambda item : item[1]) 16 | 17 | return [i[0] + 1 for i in stageF] 18 | -------------------------------------------------------------------------------- /YoonJeong/007주차/약수의개수와덧셈.py: -------------------------------------------------------------------------------- 1 | def solution(left, right): 2 | answer = 0 3 | for i in range(left, right + 1) : 4 | if divmod(i, i ** 0.5)[1] == 0 : 5 | #if int(i ** 0.5) == i ** 0.5 : 6 | answer -= i 7 | else : 8 | answer += i 9 | 10 | return answer 11 | -------------------------------------------------------------------------------- /YoonJeong/008주차/3진법뒤집기.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | threeL = [] 3 | 4 | while n > 0 : 5 | qr = divmod(n, 3) 6 | n = qr[0] 7 | threeL.insert(0, qr[1]) 8 | 9 | return sum([threeL[i] * (3 ** i) for i in range(len(threeL))]) 10 | -------------------------------------------------------------------------------- /YoonJeong/008주차/두개뽑아서더하기.py: -------------------------------------------------------------------------------- 1 | from itertools import combinations 2 | 3 | def solution(numbers): 4 | answer = set() 5 | 6 | for combi in combinations(numbers, 2) : 7 | answer.add(sum(combi)) 8 | 9 | return sorted(answer) 10 | -------------------------------------------------------------------------------- /YoonJeong/008주차/타겟넘버.py: -------------------------------------------------------------------------------- 1 | def solution(numbers, target): 2 | 3 | targetList = [0] 4 | 5 | for number in numbers : 6 | lenTL = len(targetList) 7 | 8 | while len(targetList) <= lenTL * 2 : 9 | if len(targetList) % 2 == 1 : 10 | targetList.append(targetList[(len(targetList) - 1) // 2] + number) 11 | else : 12 | targetList.append(targetList[(len(targetList) - 1) // 2] - number) 13 | 14 | return targetList[len(targetList)// 2 :].count(target) 15 | -------------------------------------------------------------------------------- /YoonJeong/009주차/2016년.py: -------------------------------------------------------------------------------- 1 | def solution(a, b): 2 | monthDate = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 3 | day = ["FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"] 4 | 5 | date = sum(monthDate[:a - 1]) + b 6 | 7 | return day[(date % 7) - 1] 8 | -------------------------------------------------------------------------------- /YoonJeong/009주차/비밀지도.py: -------------------------------------------------------------------------------- 1 | def solution(n, arr1, arr2): 2 | answer = [] 3 | 4 | for a1, a2 in zip(arr1, arr2) : 5 | arrString = '' 6 | for i in range(n) : 7 | if (a1 % 2) + (a2 % 2) > 0 : 8 | arrString = '#' + arrString 9 | else : 10 | arrString = ' ' + arrString 11 | a1, a2 = a1 // 2, a2 // 2 12 | answer.append(arrString) 13 | 14 | return answer 15 | -------------------------------------------------------------------------------- /YoonJeong/009주차/소수찾기.py: -------------------------------------------------------------------------------- 1 | from itertools import permutations 2 | 3 | def solution(numbers): 4 | answer = 0 5 | pick_nums = set() 6 | 7 | for i in range(1, len(numbers) + 1) : 8 | # per_nums에는 각 번호들이 다양한 순서로 뽑혀서 들어간다. 9 | per_nums = list(permutations(numbers, i)) 10 | # 숫자를 set에 넣어준다. 11 | for j in per_nums : 12 | pick_nums.add(int(''.join(j))) 13 | 14 | # 소수 확인 15 | for i in pick_nums : 16 | if i < 2 : 17 | continue 18 | flag = True 19 | for j in range(2, int(i ** 0.5) + 1) : 20 | if i % j == 0 : 21 | flag = False 22 | break 23 | if flag : 24 | answer += 1 25 | 26 | return answer 27 | -------------------------------------------------------------------------------- /YoonJeong/010주차/가운데글자가져오기.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | if len(s) % 2 == 1 : 3 | return s[len(s) // 2] 4 | else : 5 | return s[len(s) // 2 - 1] + s[len(s) // 2] -------------------------------------------------------------------------------- /YoonJeong/010주차/게임맵최단거리.py: -------------------------------------------------------------------------------- 1 | def solution(maps): 2 | # 오른쪽, 아래, 왼쪽, 위 3 | moves = [(0, 1), (1, 0), (0, -1), (-1, 0)] 4 | # 방문한 곳 5 | visited = [] 6 | visited.append((len(maps) - 1, len(maps[0]) - 1, 1)) 7 | 8 | # 방문한곳이 존재하면 계속 진행 9 | while visited : 10 | y, x, cnt = visited.pop(0) # 현재 위치 11 | maps[y][x] = 0 # 이미 지나온 곳은 다시 지나가지 못하게 0으로 만든다. 12 | 13 | for dy, dx in moves: 14 | ny, nx = y + dy, x + dx # ny, nx에는 다음 위치의 좌표가 들어감 15 | 16 | # 다음 위치가 목적지면, 지금까지의 count + 1을 반환 17 | if ny == 0 and nx == 0 : 18 | return cnt + 1 19 | 20 | # 목적지가 아니고, 이동할 곳이 실제로 존재하는 곳이면 진행 21 | elif 0 <= ny < len(maps) and 0 <= nx < len(maps[0]) and maps[ny][nx] == 1 : 22 | maps[ny][nx] = 0 23 | visited.append((ny, nx, cnt + 1)) 24 | 25 | return -1 26 | -------------------------------------------------------------------------------- /YoonJeong/010주차/다트게임.py: -------------------------------------------------------------------------------- 1 | def solution(dartResult): 2 | sdt = ['S', 'D', 'T'] 3 | aL = [] 4 | pivot = 0 5 | while pivot < len(dartResult) : 6 | if dartResult[pivot + 1] in sdt : 7 | aL.append(int(dartResult[pivot]) ** (sdt.index(dartResult[pivot + 1]) + 1)) 8 | pivot += 2 9 | else : 10 | aL.append(int(dartResult[pivot : pivot + 2]) ** (sdt.index(dartResult[pivot + 2]) + 1)) 11 | pivot += 3 12 | 13 | if pivot < len(dartResult) and dartResult[pivot] == '*' : 14 | aL = [aL[i] * 2 if (i == len(aL) - 2 or i == len(aL) - 1) else aL[i] for i in range(0, len(aL))] 15 | pivot += 1 16 | elif pivot < len(dartResult) and dartResult[pivot] == '#' : 17 | aL[-1] = aL[-1] * (-1) 18 | pivot += 1 19 | 20 | return sum(aL) 21 | -------------------------------------------------------------------------------- /YoonJeong/011주차/같은숫자는싫어.java: -------------------------------------------------------------------------------- 1 | import java.util.*; 2 | 3 | public class Solution { 4 | public int[] solution(int []arr) { 5 | ArrayList answer = new ArrayList(); 6 | 7 | for (int a : arr) { 8 | if (!answer.isEmpty() && answer.get(answer.size() - 1) == a) { 9 | continue; 10 | } else { 11 | answer.add(a); 12 | } 13 | } 14 | 15 | return answer.stream().mapToInt(Integer::intValue).toArray(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /YoonJeong/011주차/같은숫자는싫어.py: -------------------------------------------------------------------------------- 1 | def solution(arr): 2 | answer = [] 3 | for a in arr : 4 | if answer and answer[-1] == a : 5 | continue 6 | else : 7 | answer.append(a) 8 | 9 | return answer 10 | -------------------------------------------------------------------------------- /YoonJeong/011주차/숫자문자열과영단어.java: -------------------------------------------------------------------------------- 1 | import java.lang.NumberFormatException; 2 | 3 | class Solution { 4 | public int solution(String s) { 5 | String[] alphas = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 6 | 7 | for (int i = 0; i < 10; i++) { 8 | s = s.replaceAll(alphas[i], Integer.toString(i)); 9 | } 10 | 11 | return Integer.parseInt(s); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /YoonJeong/011주차/숫자문자열과영단어.kt: -------------------------------------------------------------------------------- 1 | class Solution { 2 | fun solution(s: String): Int { 3 | var ss = s 4 | var alpha: Array = arrayOf("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine") 5 | 6 | for (i in 0..9) { 7 | ss = ss.replace(alpha[i], "${i}") 8 | } 9 | 10 | return ss.toInt() 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /YoonJeong/011주차/조이스틱.py: -------------------------------------------------------------------------------- 1 | def solution(name): 2 | udCnt = 0 # 알파벳을 변경한 수 3 | rlCntList = [len(name) - 1] # A를 만났을 때 되돌아가는 경우의 좌우 이동 횟수 4 | nameI = 0 5 | 6 | while nameI < len(name) : 7 | # 현재 값이 A라면 여기서 뒤로 돌아가서 변경하는 경우 좌우 이동 횟수 8 | if name[nameI] == 'A' : 9 | for j in range(nameI, len(name)) : 10 | if name[j] != 'A': 11 | rlCntList.append((len(name) - j) + ((nameI - 1) * 2)) 12 | nameI = j 13 | break 14 | # 알파벳을 변경한 수 15 | if ord(name[nameI]) - ord('A') >= ord('Z') - ord(name[nameI]) + 1 : 16 | udCnt += (ord('Z') - ord(name[nameI]) + 1) 17 | else : 18 | udCnt += (ord(name[nameI]) - ord('A')) 19 | nameI += 1 20 | # 좌우로 이동한 최소 횟수 + 알파벳 변경 횟수 21 | return min(rlCntList) + udCnt 22 | -------------------------------------------------------------------------------- /YoonJeong/012주차/나누어떨어지는숫자배열.py: -------------------------------------------------------------------------------- 1 | def solution(arr, divisor): 2 | answer = [] 3 | for i in arr : 4 | if i % divisor == 0 : 5 | answer.append(i) 6 | return sorted(answer) if answer else [-1] 7 | -------------------------------------------------------------------------------- /YoonJeong/012주차/프린터.py: -------------------------------------------------------------------------------- 1 | def solution(priorities, location): 2 | answer = 0 3 | 4 | while priorities : 5 | if location == 0 and priorities[0] == max(priorities) : # 출력하려는 값이 최댓값이고, 이제 출력할차례라면 6 | answer += 1 7 | break 8 | elif priorities[0] < max(priorities) : # 이제 나올것이 최댓값이 아니라면 뒤로 보냄 9 | priorities.append(priorities.pop(0)) 10 | if location - 1 < 0 : # 이제 나올것이 내가 출력하려는것이었다면 location이 마지막번호가됨 11 | location = len(priorities) - 1 12 | else : # 내가 출력할게 아니었다면 -1 13 | location -= 1 14 | else : # 만약 처음값이 내가 출력할것이 아님, 최댓값이었다면 출력 15 | priorities.pop(0) 16 | answer += 1 17 | location -= 1 18 | 19 | return answer 20 | -------------------------------------------------------------------------------- /YoonJeong/013주차/문자열내마음대로정렬하기.py: -------------------------------------------------------------------------------- 1 | def solution(strings, n): 2 | nArray = list(set([string[n] for string in strings])) 3 | nArray.sort() 4 | 5 | sortedStrings = [[] for nn in nArray] 6 | for string in strings : 7 | i = nArray.index(string[n]) 8 | sortedStrings[i].append(string) 9 | 10 | answer = [] 11 | for sortedString in sortedStrings : 12 | sortedString.sort() 13 | answer += sortedString 14 | 15 | return answer 16 | -------------------------------------------------------------------------------- /YoonJeong/013주차/수식최대화.py: -------------------------------------------------------------------------------- 1 | import itertools 2 | 3 | def solution(expression): 4 | answer = [] 5 | 6 | ops = ['-', '+', '*'] 7 | express = [] 8 | i = 0 9 | for e in range(len(expression)) : 10 | if expression[e] in ops : 11 | express.append(expression[i:e]) 12 | express.append(expression[e:e+1]) 13 | i = e + 1 14 | else : 15 | express.append(expression[i:e+1]) 16 | 17 | ops = [op for op in ops if op in expression] 18 | for oper in itertools.permutations(ops) : 19 | exp = expression[:] 20 | for i in oper : 21 | while i in express : 22 | idx = express.index(i) 23 | express[idx - 1] = str(eval(express[idx - 1] + i + express[idx + 1])) 24 | del express[idx : idx+2] 25 | answer.append(abs(int(express[0]))) 26 | 27 | return max(answer) 28 | -------------------------------------------------------------------------------- /YoonJeong/015주차/1주차.py: -------------------------------------------------------------------------------- 1 | def solution(price, money, count): 2 | for i in range(count) : 3 | money -= (i + 1) * price 4 | return abs(money) if money < 0 else 0 5 | -------------------------------------------------------------------------------- /YoonJeong/015주차/다리를지나는트럭.py: -------------------------------------------------------------------------------- 1 | def solution(bridge_length, weight, truck_weights): 2 | answer = 1 3 | 4 | now_weight = truck_weights[0] 5 | now_bridge = [(1, truck_weights.pop(0))] 6 | 7 | while now_bridge : 8 | # 다리 위의 트럭들 한칸씩 이동 9 | now_bridge = [(now[0] + 1, now[1]) for now in now_bridge] 10 | answer += 1 11 | # 처음 위치의 트럭이 반대편에 도착하면 배열에서 제거 12 | if now_bridge and now_bridge[0][0] > bridge_length : 13 | now_weight -= now_bridge.pop(0)[1] 14 | 15 | # 다리에 트럭이 더 올라갈수있다면 올리기 16 | if truck_weights and truck_weights[0] + now_weight <= weight : 17 | now_weight += truck_weights[0] 18 | now_bridge.append((1, truck_weights.pop(0))) 19 | 20 | return answer 21 | -------------------------------------------------------------------------------- /YoonJeong/015주차/피보나치수.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | fivo = [0, 1, 1] 3 | 4 | for i in range(3, n + 1) : 5 | fivo.append(fivo[i - 1] + fivo[i - 2]) 6 | 7 | return fivo[n] % 1234567 8 | -------------------------------------------------------------------------------- /YoonJeong/016차/구명보트.py: -------------------------------------------------------------------------------- 1 | def solution(people, limit): 2 | answer = 0 3 | 4 | people.sort(reverse=True) 5 | 6 | start = 0 # 앞사람 인덱스 7 | end = len(people) - 1 # 마지막 사람 인덱스 8 | 9 | while start <= end : # 이제 탈사람이 마지막사람을 넘어서면 중단 10 | answer += 1 11 | if people[start] + people[end] <= limit : 12 | end -= 1 13 | start += 1 14 | 15 | # while people : 16 | # boat = people.pop(0) # 배에 사람 태우기 17 | # if people and boat + people[-1] <= limit : # 사람 한명 더 탈수있으면 태우기 18 | # people.pop() 19 | # answer += 1 20 | return answer 21 | -------------------------------------------------------------------------------- /YoonJeong/016차/이상한문자만들기.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | answer = '' 3 | i = 0 4 | for ss in s : 5 | if ss == ' ' : 6 | i = 0 7 | answer += ss 8 | continue 9 | elif i % 2 == 0 : 10 | answer += ss.upper() 11 | else : 12 | answer += ss.lower() 13 | i += 1 14 | 15 | return answer 16 | -------------------------------------------------------------------------------- /YoonJeong/017주차/디스크컨트롤러.py: -------------------------------------------------------------------------------- 1 | import heapq 2 | 3 | def solution(jobs): 4 | answer = 0 5 | 6 | start = -1 # 직전 작업이 시작된 시간 7 | now = 0 # 현재시간 8 | i = 0 9 | 10 | heap = [] 11 | 12 | while i < len(jobs) : 13 | for job in jobs : 14 | if start < job[0] <= now: # 지금 할수 있는 작업이 있다면 heap에 담기 15 | heapq.heappush(heap, [job[1], job[0]]) 16 | 17 | if heap : # 처리할 작업이 있다면 18 | cur = heapq.heappop(heap) # 작업을 뺀 후 현재해야할 작업에 넣는다. 19 | start = now # start에 작업 시작시간을 넣어주고 20 | now += cur[0] # 현재시간을 작업이 끝난후로 변경한다. 21 | answer += now - cur[1] # 작업 요청시간부터 종료시간까지의 시간 계산 22 | i +=1 23 | else: # 처리할 작업이 없는 경우 다음 시간으로 넘어간다 24 | now += 1 25 | 26 | return answer // len(jobs) 27 | -------------------------------------------------------------------------------- /YoonJeong/017주차/주식가격.py: -------------------------------------------------------------------------------- 1 | def solution(prices): 2 | answer = [] 3 | 4 | for i in range(len(prices)) : 5 | for j in range(i, len(prices)) : 6 | if prices[j] < prices[i] : 7 | answer.append(j - i) 8 | break 9 | else : 10 | answer.append(len(prices) - i - 1) 11 | 12 | return answer 13 | -------------------------------------------------------------------------------- /YoonJeong/017주차/직사각형별찍기.py: -------------------------------------------------------------------------------- 1 | a, b = map(int, input().strip().split(' ')) 2 | for i in range(b) : 3 | print('*' * a) 4 | -------------------------------------------------------------------------------- /YoonJeong/018주차/숫자의표현.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = 0 3 | for i in range(1, n // 2 + 1) : 4 | tmp = 0 5 | for j in range(i, n) : 6 | tmp += j 7 | if tmp >= n : 8 | break 9 | if tmp == n : 10 | answer += 1 11 | 12 | return answer + 1 13 | -------------------------------------------------------------------------------- /YoonJeong/018주차/핸드폰번호가리기.py: -------------------------------------------------------------------------------- 1 | def solution(phone_number): 2 | return '*' * (len(phone_number) - 4) + phone_number[-4:] 3 | -------------------------------------------------------------------------------- /YoonJeong/018주차/행렬의곱셈.py: -------------------------------------------------------------------------------- 1 | def solution(arr1, arr2): 2 | answer = [] 3 | 4 | for arr1I in range(len(arr1)): 5 | arr3 = [] 6 | for arr2I in range(len(arr2[0])): 7 | a3 = 0 8 | for i in range(len(arr1[arr1I])): 9 | a3 += arr1[arr1I][i] * arr2[i][arr2I] 10 | arr3.append(a3) 11 | answer.append(arr3) 12 | return answer 13 | -------------------------------------------------------------------------------- /YoonJeong/021주차/H-Index.py: -------------------------------------------------------------------------------- 1 | def solution(citations): 2 | answer = 0 3 | 4 | n = len(citations) 5 | citations.sort() 6 | 7 | for i in range(n) : 8 | # 전체길이 - 인덱스 == h 9 | # citations[i]가 h보다 크다면 이후의 값들은 모두 h보다 크다 10 | # 주어진 예시에서 i = 0, h = 5라면 정렬된 citations[0]의 값은 5보다 커야함 11 | # i가 1씩 커질때마다 h는 1씩 줄어들고, citations[i]값은 h보다 크거나 같아야 조건이 성립한다. 12 | if citations[i] >= n - i : 13 | answer = n - i 14 | break 15 | 16 | return answer 17 | -------------------------------------------------------------------------------- /YoonJeong/021주차/없는숫자더하기.py: -------------------------------------------------------------------------------- 1 | def solution(numbers): 2 | return sum([i for i in range(10)]) - sum(numbers) 3 | -------------------------------------------------------------------------------- /YoonJeong/021주차/큰수만들기.py: -------------------------------------------------------------------------------- 1 | def solution(number, k): 2 | stack = [] 3 | leng = len(number) - k 4 | for n in number : 5 | # 지울수 있고, 새로 넣을 값이 stack의 마지막 값보다 크다면 stack의 값들을 계속 지워줌 6 | while stack and k > 0 and stack[-1] < n : 7 | stack.pop() 8 | k -= 1 9 | stack.append(n) # stack의 값이 없거나 더이상 지울수있는 수가 없거나 위를 통과했다면 그냥 넣기 10 | 11 | return ''.join(stack[:leng]) 12 | -------------------------------------------------------------------------------- /YoonJeong/022주차/수박.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | return '수박' * (n // 2) + '수' * (n % 2) 3 | -------------------------------------------------------------------------------- /YoonJeong/022주차/예상대전표.py: -------------------------------------------------------------------------------- 1 | def solution(n,a,b): 2 | # 시간초과 3 | # gameQueue = [i for i in range(1, n + 1)] 4 | # matchCnt = 0 5 | # while gameQueue : 6 | # par1 = gameQueue.pop(0) 7 | # par2 = gameQueue.pop(0) 8 | 9 | # if par1 == a and par2 == b : # a와 b가 만남 10 | # matchCnt += 1 11 | # break 12 | # elif par1 == a or par2 == a : # a 경기일 때 a를 위로 13 | # matchCnt += 1 14 | # gameQueue.append(a) 15 | # elif par1 == b or par2 == b : # b 경기일 때 b를 위로 16 | # gameQueue.append(b) 17 | # else : # 둘다 아닐때 아무나 위로 18 | # gameQueue.append(par1) 19 | matchCnt = 0 20 | while a != b: 21 | a = (a + 1) // 2 22 | b = (b + 1) // 2 23 | matchCnt += 1 24 | return matchCnt 25 | -------------------------------------------------------------------------------- /YoonJeong/20주차/땅따먹기.py: -------------------------------------------------------------------------------- 1 | def solution(land): 2 | for i in range(len(land) - 1) : 3 | for j in range(4) : 4 | land[i + 1][j] += max(land[i][0:j] + land[i][j + 1:]) 5 | return max(land[-1]) 6 | 7 | # now = [] # 점수, 현재 위치가 들어감 8 | 9 | # for i in range(4) : 10 | # now.append([land[0][i], 0, i]) 11 | # while now : 12 | # point, x, y = now.pop(0) 13 | # # 마지막에 도착했다면 중단 14 | # if x == len(land) - 1 : 15 | # if answer < point : # 마지막 값이 answer 보다 크다면 값 담기 16 | # answer = point 17 | # continue 18 | 19 | # # 마지막이 아니라면 계속 진행 20 | # for i in range(4) : 21 | # if i == y : # 같은열은 밟을수없음 22 | # continue 23 | # now.append([point + land[x + 1][i], x + 1, i]) 24 | -------------------------------------------------------------------------------- /YoonJeong/20주차/카펫.py: -------------------------------------------------------------------------------- 1 | def solution(brown, yellow): 2 | answer = [] 3 | 4 | mulB = brown + yellow # brown의 가로 * 세로 5 | sumB = (brown + 4) // 2 # brown의 가로 + 세로 6 | 7 | for i in range(sumB) : 8 | if i * (sumB - i) == mulB : 9 | answer.append(i) 10 | break 11 | answer.insert(0, sumB - answer[0]) 12 | 13 | return answer 14 | -------------------------------------------------------------------------------- /YoonJeong/20주차/하샤드수.py: -------------------------------------------------------------------------------- 1 | def solution(x): 2 | stringX = [int(i) for i in str(x)] 3 | 4 | if x % sum(stringX) == 0 : 5 | return True 6 | return False 7 | -------------------------------------------------------------------------------- /YoonJeong/README.md: -------------------------------------------------------------------------------- 1 | # 🐍 [YoonJeong](https://github.com/Yo0oN) 2 | 3 | |주차|문제1|문제2|문제3| 4 | |:-----:|:-----:|:-----:|:-----:| 5 | |1주차(210503~)|210504|210505|210506| 6 | |2주차(210510~)|210511|210512|210513| 7 | |3주차(210517~)|210518|210520|210519| 8 | |4주차(210524~)|210525|210526|210530| 9 | |5주차(210531~)|210601|210602|210604| 10 | |6주차(210607~)|210612|210608|210611| 11 | |7주차(210614~)|210615|210616|210619| 12 | |8주차(210621~)|210622|210623|210624| 13 | |9주차(210628~)|210629|210701|210705| 14 | |10주차(210705~)|210706|210707|210809| 15 | |11주차(210712~)|210713|210714|210715| 16 | |12주차(210719~)|210720|210722|210723| 17 | |13주차(210726~)|210729|-|-| 18 | |15주차(210809~)|210811|2108012|210813| 19 | |16주차(210816~)|210817|210821|| 20 | |17주차(210823~)|210824|210910|210826| 21 | |18주차(210830~)|210901|210903|210905| 22 | |20주차(210913~)|210914|210915|| 23 | |21주차(210920~)|210921|210924|210926| 24 | |22주차(210927~)|210928|-|211003| 25 | -------------------------------------------------------------------------------- /hanseok/10주차/가운데글자.py: -------------------------------------------------------------------------------- 1 | 2 | def solution(s): 3 | if len(s)%2 == 1: #짝수, 홀수 인지 구분 4 | return s[len(s)//2] #홀수 가운데 값 5 | else: 6 | return s[(len(s)//2)-1:(len(s)//2)+1] # 짝수 -1,+1값 -------------------------------------------------------------------------------- /hanseok/10주차/게임맵최단거리.py: -------------------------------------------------------------------------------- 1 | from collections import deque 2 | #BFS알고리즘 3 | maps = [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 4 | d = [[1,0], [-1, 0], [0,1], [0,-1]] #위,아래,왼쪽, 오른쪽 움직일때 사용할 좌표 리스트 5 | 6 | r = len(maps) 7 | c = len(maps[0]) 8 | table = [[-1 for _ in range(c)] for _ in range(r)] #map만들기 9 | q = deque() 10 | q.append([0, 0]) #시작좌표 11 | table[0][0] = 1 #시작지점 한칸 이므로 1넣어줌 12 | 13 | while q: 14 | y,x = q.popleft() 15 | 16 | for i in range(4): 17 | ny = y + d[i][0] 18 | nx = x + d[i][1] 19 | # 맵안에 있고 벽이 아닌 경우 20 | if -1 < ny < r and -1 < nx < c: 21 | if maps[ny][nx] == 1: 22 | if table[ny][nx] == -1: 23 | table[ny][nx] = table[y][x] + 1 24 | q.append([ny, nx]) 25 | 26 | answer = table[-1][-1] 27 | print(answer) 28 | 29 | -------------------------------------------------------------------------------- /hanseok/11주차/같은숫자는싫어.py: -------------------------------------------------------------------------------- 1 | def solution(arr): 2 | answer = [] 3 | for i in range(len(arr)): 4 | if i < 1: 5 | answer.append(arr[i]) 6 | else: 7 | if arr[i-1] != arr[i]: 8 | answer.append(arr[i]) 9 | else: 10 | continue 11 | return answer -------------------------------------------------------------------------------- /hanseok/11주차/숫자 문자열과 영단어.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | dic = {"one": "1", "two": "2", "three": "3", "four": "4", "five": "5", 3 | "six": "6", "seven": "7", "eight": "8", "nine": "9", "zero": "0"} 4 | temp = '' 5 | answer= '' 6 | 7 | for i in s: 8 | if i.isdigit(): 9 | answer += i 10 | else: 11 | temp += i 12 | if temp in dic.keys(): 13 | answer += dic[temp] 14 | temp = '' 15 | return int(answer) -------------------------------------------------------------------------------- /hanseok/12주차/나누어떨어지는숫자배열.py: -------------------------------------------------------------------------------- 1 | #풀이 2 | #arr에 for문을 돌려 나누었을때 나머지값이 0이면 answer list에 넣는다 3 | #answer list의 길이가 0이면 -1을 넣고 4 | #내림차순으로 출력한다 5 | 6 | arr = [2, 36, 1, 3] 7 | divisor = 1 8 | answer = [] 9 | 10 | for i in arr : 11 | #print(i % divisor) 12 | if i % divisor == 0: 13 | answer.append(i) 14 | if len(answer) == 0: 15 | answer.append(-1) 16 | print(sorted(answer)) 17 | 18 | def solution(arr, divisor): 19 | answer = [] 20 | for i in arr: 21 | if i % divisor == 0: 22 | answer.append(i) 23 | if len(answer) == 0: 24 | answer.append(-1) 25 | return sorted(answer) -------------------------------------------------------------------------------- /hanseok/12주차/프린터.py: -------------------------------------------------------------------------------- 1 | #priorities = [2, 1, 3, 2] #프린터 될 문서수와 중요도 2 | #location = 2 #내가 프린트 해야할 문서 -> list상에서는 3번째 문서 3 | #return 1 # 3번째 문서가 가장 처음으로 return 되어 나와서 1임 4 | 5 | #중요도에 따라 return을 해야하고 중요도가 같은값으면 왼쪽부터 우선순위임 6 | 7 | from collections import deque 8 | 9 | priorities = [1, 1, 9, 1, 1, 1] 10 | location = 0 11 | answer = 0 12 | 13 | deq = deque([(i,p) for i,p in enumerate(priorities)]) 14 | #[(0, 2), (1, 1), (2, 3), (3, 2)] 15 | print(deq.popleft()) #deque맨처음값 16 | print(max(deq)[0]) #deque의 (3, 2) -> 3 17 | 18 | while len(deq): 19 | first = deq.popleft() 20 | if deq and first[0] < max(deq)[0]: 21 | deq.append(first) 22 | else: #max == first[0] 23 | answer += 1 #우선순위가 높고 프린터가 되므로 answer +=1 한다 24 | if first[1] == location: 25 | #print('deq = '+str(deq[1])) 26 | #print(location) 27 | break 28 | print(answer) 29 | -------------------------------------------------------------------------------- /hanseok/13주차/문자열 내 마음대로 정렬하기.py: -------------------------------------------------------------------------------- 1 | def solution(strings, n): 2 | """print(strings) 3 | print(n) 4 | print(strings[1][1])""" 5 | temp = [] 6 | answer = [] 7 | for i in strings: 8 | temp.append(i[n]+i) #usun -> n번째수+문자 9 | print(temp) 10 | temp.sort() #내림차순으로 정렬 11 | for i in temp: 12 | answer.append(i[1:])#usun 첫번째 문자를 제거후 answer에 넣기 13 | return answer 14 | 15 | 16 | 17 | 18 | print(solution(strings=["sun", "bed", "car"] 19 | ,n=1 )) -------------------------------------------------------------------------------- /hanseok/1주차/countriesOf124.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = '' 3 | 4 | while n > 0: 5 | if n % 3 == 0: 6 | answer = '4' + answer 7 | n = int(n / 3 - 1) 8 | else: 9 | answer = str(n % 3) + answer 10 | n = int(n / 3) 11 | return answer -------------------------------------------------------------------------------- /hanseok/1주차/notFinshePlayer.py: -------------------------------------------------------------------------------- 1 | def solution(participant, completion): 2 | p = sorted(participant) 3 | c = sorted(completion) 4 | 5 | num = len(c) 6 | 7 | for i in range(num): 8 | if p[i] != c[i]: 9 | return p[i] 10 | return p[i + 1] -------------------------------------------------------------------------------- /hanseok/1주차/ponkesmon.py: -------------------------------------------------------------------------------- 1 | def solution(nums): 2 | answer = 0 3 | length = int(len(nums) / 2) 4 | setLen = len((list(set(nums)))) 5 | 6 | if setLen > length: 7 | answer = length 8 | else: 9 | answer = setLen 10 | return answer -------------------------------------------------------------------------------- /hanseok/2주차/K번째수.py: -------------------------------------------------------------------------------- 1 | # 연습용 코드 2 | answer = [] 3 | array=[1, 5, 2, 6, 3, 7, 4] 4 | commands=[[2, 5, 3], [4, 4, 1], [1, 7, 3]] 5 | 6 | print(array) 7 | print(commands) 8 | print(commands[0][0]) 9 | 10 | for i in range(len(commands)): 11 | arr = sorted(array[commands[i][0]-1:commands[i][1]]) 12 | answer.append(arr[commands[i][2]-1]) 13 | 14 | print(answer) 15 | 16 | #제출용코드 17 | def solution(array, commands): 18 | answer = [] 19 | 20 | for i in range(len(commands)): 21 | arr = sorted(array[commands[i][0]-1:commands[i][1]]) 22 | answer.append(arr[commands[i][2]-1]) 23 | 24 | return answer 25 | -------------------------------------------------------------------------------- /hanseok/2주차/멀쩡한사각형.py: -------------------------------------------------------------------------------- 1 | #연습용 2 | #from math import * 3 | w = 8 4 | h = 12 5 | answer = 0 6 | gcd = gcd(w, h) # 최대 공약수 7 | 8 | answer = w * h - ((w/gcd+h/gcd)-1) * gcd 9 | print(gcd) 10 | print(answer) 11 | 12 | #제출용 13 | from math import * # 최대공약수 사용을 위해 math import 14 | 15 | def solution(w,h): 16 | a = gcd(w, h) 17 | answer = w*h-(w/a+h/a-1)*a 18 | return answer 19 | 20 | -------------------------------------------------------------------------------- /hanseok/2주차/체육복.py: -------------------------------------------------------------------------------- 1 | def solution2(n, lost, reserve): 2 | setRes = set(reserve) - set(lost) 3 | setLos = set(lost) - set(reserve) 4 | 5 | for i in setRes: 6 | y = i - 1 7 | x = i + 1 8 | if y in setLos: 9 | setLos.remove(y) 10 | elif x in setLos: 11 | setLos.remove(x) 12 | return n - len(setLos) 13 | 14 | #print(solution2(n=5, lost=[2, 4], reserve=[1,3,5])) 15 | print(solution2(n=5, lost=[2, 4], reserve=[3])) 16 | #print(solution2(n=3, lost=[3], reserve=[1])) -------------------------------------------------------------------------------- /hanseok/3주차/음양더하기.py: -------------------------------------------------------------------------------- 1 | """absolutes = [4, 7, 12] 2 | signs = ['true', 'false', 'true']""" 3 | absolutes = [1, 2, 3] 4 | signs = ['false', 'false', 'true'] 5 | 6 | def solution(absolutes, signs): 7 | answer = 0 8 | for i in range(len(absolutes)): 9 | if signs[i]: 10 | answer += absolutes[i] 11 | else: 12 | answer += -absolutes[i] 13 | return answer -------------------------------------------------------------------------------- /hanseok/3주차/짝지어제거하기.py: -------------------------------------------------------------------------------- 1 | 2 | def soution(s): 3 | stack = [] # 위의 s를 list로 쓰면 문자열 형식으로 들어가 pop...가 안된당 4 | for i in s: 5 | if not stack: #빈 리스트 확인 6 | #맨 처음값은 무조건 append 되도록 7 | stack.append(i) 8 | continue #밑의 if문이 돌아서 넘겨줘야함 9 | elif stack[-1] == i: #stack[-1] 리스트 stack의 마지막 요솟값 10 | stack.pop(-1) # stack마지막 요소값을 지우고 다음 for 문으로 도는거 11 | else: 12 | stack.append(i) 13 | if stack: return 0 # true = 0, flse = 1 14 | else: return 1 15 | 16 | print(soution(s = "baabaa")) 17 | #print(soution(s = "cdcd")) 18 | #s = "baabaa" #파이썬에서 문자열은 ['b','a','a'...] 문자열로 들어온다 -------------------------------------------------------------------------------- /hanseok/4주차/기능개발.py: -------------------------------------------------------------------------------- 1 | progresses = [93, 30, 55] 2 | speeds = [1, 30, 5] 3 | answer = [] 4 | count = 0 5 | time= 0 6 | 7 | while len(progresses)>0: 8 | if (progresses[0] + time*speeds[0]) >= 100: 9 | print(progresses) 10 | progresses.pop(0) 11 | speeds.pop(0) 12 | print(progresses) 13 | count +=1 14 | else: 15 | print(progresses[0] + time * speeds[0]) 16 | if count > 0: 17 | print("count1 = " + str(count)) 18 | answer.append(count) 19 | count = 0 20 | time+=1 21 | print(time) 22 | print("count2 = "+str(count)) 23 | answer.append(count) 24 | print(answer) 25 | 26 | 27 | -------------------------------------------------------------------------------- /hanseok/4주차/내적.py: -------------------------------------------------------------------------------- 1 | """a = [1,2,3,4] 2 | b = [-3,-1,0,2]""" 3 | a = [-1,0,1] 4 | b = [1,0,-1] 5 | answer = 0 6 | 7 | for i in zip(a,b): 8 | answer += i[0]*i[1] 9 | print(answer) -------------------------------------------------------------------------------- /hanseok/5주차/더맵게.py: -------------------------------------------------------------------------------- 1 | scoville = [1, 2, 3, 9, 10, 12] 2 | K = 7 3 | cnt = 0 4 | #효율성 테스트 실패 5 | # sort를 써서 시간 초과가 된듯하다 6 | """while scoville[0] < K : 7 | cnt += 1 8 | newScowille = scoville[0]+(scoville[1]*2) 9 | print(scoville) 10 | print(newScowille) 11 | del scoville[1] 12 | del scoville[0] 13 | #print(scoville) 14 | scoville.insert(0, newScowille) 15 | scoville = sorted(scoville) 16 | print(cnt) 17 | """ 18 | 19 | #heapq 모듈을 사용하여 풀이 20 | #제출용 21 | 22 | import heapq 23 | def solution(scoville, K): 24 | answer = 0 25 | heapq.heapify(scoville) #list 힙으로 변환 26 | while scoville[0] < K : 27 | if len(scoville) == 1 and scoville[0] < K: 28 | return -1 29 | newScoville = heapq.heappop(scoville)+(heapq.heappop(scoville)*2) 30 | heapq.heappush(scoville,newScoville) 31 | answer += 1 32 | return answer -------------------------------------------------------------------------------- /hanseok/5주차/로또의 최고 순위와 최저 순위.py: -------------------------------------------------------------------------------- 1 | lottos = [44, 1, 0, 0, 31, 25] 2 | win_nums= [31, 10, 45, 1, 6, 19] 3 | result = [] 4 | rank = [6,6,5,4,3,2,1] 5 | 6 | cnt0 = lottos.count(0) 7 | inte = set(lottos)&set(win_nums) #교집합 추출 8 | min = len(inte) 9 | max = min+cnt0 10 | result.append(rank[max]) 11 | result.append(rank[min]) 12 | 13 | print(result) 14 | 15 | #제출용 16 | def solution(lottos, win_nums): 17 | answer = [] 18 | rank = [6, 6, 5, 4, 3, 2, 1] 19 | 20 | cnt0 = lottos.count(0) 21 | inte = set(lottos) & set(win_nums) 22 | min = len(inte) 23 | max = min + cnt0 24 | answer.append(rank[max]) 25 | answer.append(rank[min]) 26 | return answer -------------------------------------------------------------------------------- /hanseok/6주차/예산.py: -------------------------------------------------------------------------------- 1 | d = [1,3,2,5,4] 2 | budget = 9 3 | answer = 0 4 | 5 | d.sort() #적은 금액부터 예산처리 위해 6 | 7 | for i in d: 8 | if i <= budget: 9 | answer += 1 10 | budget -= i 11 | else: 12 | break 13 | print(answer) 14 | -------------------------------------------------------------------------------- /hanseok/6주차/오픈채팅방.py: -------------------------------------------------------------------------------- 1 | record = ["Enter uid1234 Muzi", 2 | "Enter uid4567 Prodo", 3 | "Leave uid1234", 4 | "Enter uid1234 Prodo", 5 | "Change uid4567 Ryan"] 6 | answer = [] 7 | user = {} 8 | 9 | for message in record: 10 | if (message.split(' ')[0] == 'Enter')|(message.split(' ')[0] == 'Change'): 11 | user[message.split(' ')[1]] = message.split(' ')[2] 12 | 13 | for message in record: 14 | if message.split(' ')[0] == 'Enter': 15 | answer.append("{}님이 들어왔습니다.".format(user[message.split(' ')[1]])) 16 | elif message.split(' ')[0] == 'Leave': 17 | answer.append("{}님이 나갔습니다.".format(user[message.split(' ')[1]])) 18 | else: 19 | pass 20 | print(answer) 21 | -------------------------------------------------------------------------------- /hanseok/7주차/문자열압축.py: -------------------------------------------------------------------------------- 1 | s = "aabbaccc" # "2a2b3c" 2 | result = "" 3 | length = [] 4 | 5 | if len(s) == 1: 6 | #return 1 문자열이 1일시 1로 return 7 | for cut in range(1, len(s) // 2 + 1): 8 | count = 1 9 | tempStr = s[:cut] #처음 자른값 10 | for i in range(cut,len(s), cut): #cnt부터 len(s)까지 cnt만끔 띄어서 반복 11 | if s[i:i+cut] == tempStr: #잘린 값과 바로 뒷값이 같으면 count +1 12 | count += 1 13 | else: 14 | if count == 1: 15 | count = "" 16 | result += str(count) + tempStr #반복횟수 자른값 result 중첩 17 | tempStr = s[i:i+cut] #다음 값 으로 변경 18 | count = 1 19 | if count == 1: 20 | count = "" 21 | result += str(count) + tempStr 22 | print(result) 23 | length.append(len(result)) #문자열 length값 for문이 돌때 마다 넣기 24 | result = "" 25 | print(length) 26 | print(min(length))#최솟값 return -------------------------------------------------------------------------------- /hanseok/7주차/실패율.py: -------------------------------------------------------------------------------- 1 | def solution(N, stages): 2 | answer = {} 3 | num = len(stages) 4 | 5 | for stage in range(1, N + 1): 6 | if num != 0: 7 | cnt = stages.count(stage) 8 | answer[stage] = cnt / num 9 | num -= cnt 10 | else: 11 | answer[stage] = 0 12 | return sorted(answer, key=lambda x: answer[x], reverse=True) -------------------------------------------------------------------------------- /hanseok/7주차/약수의개수와덧셈.py: -------------------------------------------------------------------------------- 1 | # 약수 = 나누기를 했을때 0이 되는수 2 | # left ~ right까지의 약수를 구하 3 | def solution(left, right): 4 | answer = 0 5 | count = 0 6 | for num in range(left, right+1): 7 | for i in range(1, num+1): 8 | if num%i == 0: 9 | count +=1 10 | if count % 2 == 0: 11 | answer += num 12 | else: 13 | answer -= num 14 | count = 0 15 | return answer -------------------------------------------------------------------------------- /hanseok/8주차/3진법뒤집기.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = '' 3 | result = 0 4 | while n>= 1: 5 | rest = n%3 6 | n //= 3 7 | answer += str(rest) 8 | i=0 9 | for cn in range(len(answer)-1,-1,-1): 10 | result += int(answer[cn])*(3**i) 11 | i+= 1 12 | return result -------------------------------------------------------------------------------- /hanseok/8주차/두개뽑아더하기.py: -------------------------------------------------------------------------------- 1 | def solution(numbers): 2 | answer = [] 3 | for i in range(0, len(numbers)-1): 4 | for j in numbers[i+1:]: 5 | answer.append(numbers[i]+j) 6 | return sorted(list(set(answer))) -------------------------------------------------------------------------------- /hanseok/8주차/타겟넘버.py: -------------------------------------------------------------------------------- 1 | def solution(numbers, target): 2 | answer = [0] 3 | for i in range(len(numbers)): 4 | temp = [] 5 | for j in range(len(answer)): 6 | temp.append(answer[j] - numbers[i]) 7 | temp.append(answer[j] + numbers[i]) 8 | 9 | answer = temp 10 | return answer.count(target) -------------------------------------------------------------------------------- /hanseok/9주차/2016.py: -------------------------------------------------------------------------------- 1 | #1번 풀이 2 | a = 5 3 | b = 24 4 | answer = '' 5 | y = [31,29,31,30,31,30,31,31,30,31,30,31] #마지막 날짜 list 6 | d = ['FRI','SAT','SUN','MON','TUE','WED','THU'] # 2016 1월 1일 금요일이여서 금요일 부터 시작 7 | k = d[(sum(y[:a-1])+b-1)%7] #지난일수%7 8 | print(k) 9 | 10 | #2번 풀이 11 | #datetime의 weekday함수 사용 12 | #datetime모듈 날짜생성후 week함수로 요일을 찾는것 13 | #weekday함수는 요일을 정수로 변환하여 반환한다. 월=0 ~ 일=6 14 | import datetime 15 | day = ['MON','TUE','WED','THU','FRI','SAT','SUN'] 16 | print(day[datetime.datetime(2016,a,b).weekday()]) 17 | -------------------------------------------------------------------------------- /hanseok/9주차/비밀지도.py: -------------------------------------------------------------------------------- 1 | n = 5 2 | arr1 = [9, 20, 28, 18, 11] 3 | arr2 = [30, 1, 21, 17, 28] 4 | answer = [] 5 | #자연수 -> 2진수 6 | # bin으로 작성시 '0b11111'가 나오고 0b는 진수를 표현하는 문자이다 7 | # 제거해야 함으로 [2:] 8 | 9 | def solution(n, arr1, arr2): 10 | answer = [] 11 | for i in range(n): 12 | bin2 = bin(arr1[i]|arr2[i])[2:] #arr1, arr2이진수 변환 13 | answer.append(("0" *(n - len(bin2)) + bin2).replace("1", "#").replace("0", " ")) 14 | return answer -------------------------------------------------------------------------------- /hanseok/9주차/소수찾기.py: -------------------------------------------------------------------------------- 1 | from itertools import permutations 2 | import math 3 | # permutations를 이용해서 모든 경우의 수를 만들고 판정 -> 순열 4 | 5 | def solution(numbers): 6 | answer = set() 7 | for n in range(len(numbers)): 8 | for i in set(list(permutations(numbers, n + 1))): 9 | if in_decimal(int(''.join(i))): 10 | answer.add(int(''.join(i))) 11 | return len(answer) 12 | 13 | def in_decimal(n): 14 | if n < 2: 15 | return False 16 | for i in range(2, n): 17 | if n % i == 0 and n != 0: 18 | return False 19 | else: 20 | return True 21 | print(solution("17")) -------------------------------------------------------------------------------- /juhee2/10주차/가운데글자가져오기.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | return s[len(s) // 2 - 1 : len(s) // 2 + 1] if len(s) % 2 == 0 else s[len(s) // 2] 3 | -------------------------------------------------------------------------------- /juhee2/10주차/다트게임.py: -------------------------------------------------------------------------------- 1 | def solution(dartResult): 2 | area = ['S', 'D', 'T'] 3 | score, round_score = '', [] 4 | for i in dartResult: 5 | if i.isdigit(): 6 | score += i 7 | elif i in area: 8 | round_score.append(int(score) ** (area.index(i) + 1)) 9 | score = '' 10 | elif i == '*': 11 | # round_score = [round_score[i] if i < len(round_score) -2 else round_score[i] * 2 for i in range(len(round_score))] 12 | round_score[-2:] = [rs * 2 for rs in round_score[-2:]] 13 | elif i == '#': 14 | round_score[-1] = -(round_score[-1]) 15 | return sum(round_score) 16 | -------------------------------------------------------------------------------- /juhee2/11주차/같은숫자는싫어.py: -------------------------------------------------------------------------------- 1 | # 효율성 0점 2 | # def solution(arr): 3 | # remove = [i for i in range(len(arr) - 1) if arr[i] == arr[i+1]] 4 | # return [arr[i] for i in range(len(arr)) if i not in remove] 5 | 6 | def solution(arr): 7 | answer = [] 8 | for i,a in enumerate(arr): 9 | if i == 0: 10 | answer.append(a) 11 | continue 12 | if answer[-1] != a: 13 | answer.append(a) 14 | return answer 15 | -------------------------------------------------------------------------------- /juhee2/11주차/숫자문자열과영단어.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | numbers = ['zero', 'one', 'two','three','four','five','six','seven','eight','nine'] 3 | for i in range(len(numbers)): 4 | s = s.replace(numbers[i], str(i)) 5 | 6 | return int(s) 7 | -------------------------------------------------------------------------------- /juhee2/11주차/조이스틱.py: -------------------------------------------------------------------------------- 1 | import string 2 | def solution(name): 3 | alpha = string.ascii_uppercase 4 | updown = 0 5 | min_move = len(name) - 1 6 | move = 0 7 | 8 | for i, n in enumerate(name): 9 | updown += alpha[::-1].index(n) + 1 if alpha.index(n) > len(alpha) // 2 else alpha.index(n) 10 | move += 1 11 | while move < len(name) and name[move] == 'A': 12 | move += 1 13 | min_move = min(min_move, i + i + len(name) - move) 14 | return updown + min_move 15 | -------------------------------------------------------------------------------- /juhee2/12주차/나누어떨어지는숫자배열.py: -------------------------------------------------------------------------------- 1 | def solution(arr, divisor): 2 | result = [a for a in arr if a % divisor == 0 ] 3 | result.sort() 4 | return result if len(result) > 0 else [-1] 5 | -------------------------------------------------------------------------------- /juhee2/12주차/프린터.py: -------------------------------------------------------------------------------- 1 | def solution(priorities, location): 2 | p = priorities 3 | cnt = 0 4 | while p: 5 | max_index = p.index(max(p)) 6 | if location > max_index: 7 | location = location - max_index 8 | elif location < max_index: 9 | location = len(p) - (max_index - location) 10 | else: 11 | location = 0 12 | p = p[max_index:] + p[:max_index] 13 | p.pop(0) 14 | cnt += 1 15 | if location == 0: break 16 | location -= 1 17 | return cnt 18 | -------------------------------------------------------------------------------- /juhee2/13주차/문자열내마음대로정렬하기.py: -------------------------------------------------------------------------------- 1 | def solution(strings, n): 2 | answer = [] 3 | strings.sort() 4 | 5 | ordered = sorted([[i , strings[i][n]] for i in range(len(strings))], key = lambda x: x[1]) 6 | 7 | answer = [strings[ordered[i][0]] for i in range(len(ordered))] 8 | return answer 9 | -------------------------------------------------------------------------------- /juhee2/13주차/수식최대화.py: -------------------------------------------------------------------------------- 1 | from itertools import permutations 2 | 3 | def solution(expression): 4 | operators = ["*", "+", "-"] 5 | answer = [] 6 | for oper in permutations(operators, 3): 7 | tmp_exp = [""] 8 | for exp in expression: 9 | if exp.isdigit() and tmp_exp[-1] not in operators: 10 | tmp_exp[-1] += exp 11 | else: 12 | tmp_exp.append(exp) 13 | for o in oper: 14 | while o in tmp_exp: 15 | idx = tmp_exp.index(o) 16 | tmp_exp = tmp_exp[:idx-1]+[str(eval("".join(tmp_exp[idx-1:idx+2])))]+tmp_exp[idx+2:] 17 | answer.append(abs(int(tmp_exp[0]))) 18 | return max(answer) 19 | -------------------------------------------------------------------------------- /juhee2/15주차/1주차.py: -------------------------------------------------------------------------------- 1 | # 런타임에러 2 | # def solution(price, money, count): 3 | # result = money - calPrice(price, count) 4 | # return 0 if result > 0 else abs(result) 5 | 6 | # def calPrice(price, count): 7 | # cal = 0 8 | # if count < 1: 9 | # return cal 10 | # cal = price * count 11 | # return cal + calPrice(price, count - 1) 12 | 13 | def solution(price, money, count): 14 | for i in range(1,count + 1): 15 | money -= price * i 16 | 17 | return 0 if money > 0 else abs(money) 18 | -------------------------------------------------------------------------------- /juhee2/15주차/다리를지나는트럭.py: -------------------------------------------------------------------------------- 1 | def solution(bridge_length, weight, truck_weights): 2 | answer = 0 3 | idx = 0 4 | on_bridge = [] 5 | 6 | answer = 1 7 | on_bridge.append((answer, truck_weights[idx])) 8 | while on_bridge: 9 | answer += 1 10 | if answer - on_bridge[0][0] == bridge_length: 11 | on_bridge.pop(0) 12 | 13 | if idx < len(truck_weights)-1 and sum([t[1] for t in on_bridge]) + truck_weights[idx + 1] <= weight and len(on_bridge) <= bridge_length: 14 | idx += 1 15 | on_bridge.append((answer, truck_weights[idx])) 16 | return answer 17 | -------------------------------------------------------------------------------- /juhee2/15주차/피보나치수.py: -------------------------------------------------------------------------------- 1 | # def solution(n): 2 | # answer = fibo(n) 3 | # return answer 4 | 5 | # def fibo(n): 6 | # if (n == 0): 7 | # return 0 8 | # if (n == 1): 9 | # return 1 10 | # return (fibo(n-2)%1234567 + fibo(n-1)%1234567) % 1234567 11 | 12 | def solution(n): 13 | f = [0,1] + [0 for _ in range(n-1)] 14 | 15 | for i in range(2,n+1): 16 | f[i] = f[i-2] + f[i-1] 17 | 18 | return f[n] % 1234567 19 | 20 | -------------------------------------------------------------------------------- /juhee2/17주차/디스트컨트롤러.py: -------------------------------------------------------------------------------- 1 | import heapq 2 | def solution(jobs): 3 | answer ,now, cnt = 0,0,0 4 | start = -1 # 바로 이전 작업 시작시간 5 | heap = [] 6 | 7 | while cnt < len(jobs): 8 | for job in jobs: 9 | if start < job[0] <= now: # 현재시점에 작업을 처리할수 있는지 10 | heapq.heappush(heap, [job[1], job[0]]) # 작업 소요 시간 기준으로 최소 힙 [작업시간, 도착시간] 11 | if len(heap) > 0: 12 | current = heapq.heappop(heap) # 제일 앞 요소 pop 13 | start = now 14 | now += current[0] 15 | answer += (now - current[1]) # 현재 시점 - 작업 요청 시간 (해당 작업에 총 걸린 시간) 16 | cnt += 1 # 완료한 작업 수 +1 17 | else: 18 | now += 1 # 현재 처리할게 없는 경우, 작업 요청시간 아직 오지 않은것이므로 (현재 시점 + 1) 19 | return int(answer / len(jobs)) 20 | -------------------------------------------------------------------------------- /juhee2/17주차/주식가격.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | public int[] solution(int[] prices) { 3 | int[] answer = new int[prices.length]; 4 | 5 | for (int i = 0; i < prices.length; i++) { 6 | int time = 0; 7 | for (int j = i+1; j < prices.length; j++) { 8 | time++; 9 | if(prices[i] > prices[j]) { 10 | break; 11 | } 12 | 13 | } 14 | answer[i] = time; 15 | } 16 | return answer; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /juhee2/17주차/직사각형별찍기.py: -------------------------------------------------------------------------------- 1 | a, b = map(int, input().strip().split(' ')) 2 | for _ in range(b): 3 | for _ in range(a): 4 | print('*', end='') 5 | print() 6 | -------------------------------------------------------------------------------- /juhee2/18주차/숫자의표현.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = 1 3 | for i in range(1, n//2+1): 4 | total = 0 5 | for j in range(i, (n//2)+2): 6 | total += j 7 | if total == n: 8 | answer+=1 9 | break 10 | elif total > n: 11 | break 12 | return answer 13 | -------------------------------------------------------------------------------- /juhee2/18주차/핸드폰번호가리기.py: -------------------------------------------------------------------------------- 1 | def solution(phone_number): 2 | return "*" * len(phone_number[:-4]) + phone_number[-4:] 3 | -------------------------------------------------------------------------------- /juhee2/18주차/행렬의곱셈.py: -------------------------------------------------------------------------------- 1 | def solution(arr1, arr2): 2 | answer = [[0] * len(arr2[0]) for i in range(len(arr1))] 3 | for i in range(len(arr1)): 4 | for j in range(len(arr2[0])): 5 | result = 0 6 | for k in range(len(arr2)): 7 | result += arr1[i][k] * arr2[k][j] 8 | answer[i][j] = result 9 | return answer 10 | -------------------------------------------------------------------------------- /juhee2/1주차/123나라의숫자.py: -------------------------------------------------------------------------------- 1 | def solution(n): 2 | answer = '' 3 | while n >= 1 : 4 | nMod = n % 3 5 | if (nMod == 0) : 6 | answer += '4' 7 | n = n // 3 - 1 8 | else : 9 | answer += str(nMod) 10 | n = n // 3 11 | return answer[::-1] 12 | -------------------------------------------------------------------------------- /juhee2/1주차/완주하지못한선수.py: -------------------------------------------------------------------------------- 1 | # 효율성 테스트 통과 X 2 | # def solution(participant, completion): 3 | # for person in completion: 4 | # participant.remove(person) 5 | # answer = participant[0] 6 | # return answer 7 | 8 | def solution(participant,completion): 9 | participant.sort() 10 | completion.sort() 11 | for i,j in zip(participant,completion): 12 | if i != j: 13 | return i 14 | return participant[-1] 15 | -------------------------------------------------------------------------------- /juhee2/1주차/폰켓몬.py: -------------------------------------------------------------------------------- 1 | def solution(nums): 2 | answer = 0 3 | # 첫 번째 풀이 4 | #s = {}; # set 선언 5 | # for i in nums : 6 | # s.add(i); 7 | # cntMon = len(nums) / 2; 8 | 9 | # answer = len(s) if cntMon > len(s) else cntMon; 10 | 11 | s = set(nums); 12 | answer = len(s) if len(nums) // 2 > len(s) else len(nums) // 2; 13 | return answer; 14 | -------------------------------------------------------------------------------- /juhee2/20주차/땅따먹기.py: -------------------------------------------------------------------------------- 1 | def solution(land): 2 | answer = 0 3 | 4 | for i in range(1, len(land)): 5 | for n in range(4): 6 | land[i][n] += max([land[i-1][idx] for idx in range(4) if idx != n]) 7 | 8 | return max(land[-1]) 9 | -------------------------------------------------------------------------------- /juhee2/20주차/카펫.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | public int[] solution(int brown, int yellow) { 3 | int[] answer = {0,0}; 4 | int area = brown + yellow; 5 | for (int i=1; i< area/ 2; i++) { 6 | if (area % i ==0) { 7 | int x = area / i; 8 | int y = i; 9 | 10 | if (2*(x+y)== brown +4) { 11 | answer[0] = x; 12 | answer[1] = y; 13 | break; 14 | } 15 | } 16 | } 17 | return answer; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /juhee2/20주차/하샤드수.java: -------------------------------------------------------------------------------- 1 | class Solution { 2 | public boolean solution(int x) { 3 | boolean answer = true; 4 | 5 | String[] num = Integer.toString(x).split(""); 6 | int hap = 0; 7 | for (String n : num) { 8 | hap += Integer.parseInt(n); 9 | } 10 | if (x % hap != 0) { 11 | answer = false; 12 | } 13 | return answer; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /juhee2/21주차/H-Index.py: -------------------------------------------------------------------------------- 1 | def solution(citations): 2 | answer = 0 3 | citations.sort(reverse=True) 4 | for i in range(len(citations)): 5 | if i >= citations[i]: 6 | answer = i 7 | break 8 | else: 9 | answer = len(citations) 10 | return answer 11 | -------------------------------------------------------------------------------- /juhee2/21주차/없는숫자더하기.py: -------------------------------------------------------------------------------- 1 | def solution(numbers): 2 | answer = 0 3 | 4 | for i in range(10): 5 | if i not in numbers: 6 | answer += i 7 | return answer 8 | -------------------------------------------------------------------------------- /juhee2/21주차/큰수만들기.py: -------------------------------------------------------------------------------- 1 | def solution(number, k): 2 | pick = [] 3 | answer = '' 4 | for idx, val in enumerate(number): 5 | while pick and k > 0 and pick[-1] < val: 6 | pick.pop() 7 | k -= 1 8 | pick.append(val) 9 | if k == 0: # 뺄거 다 뺐음 10 | answer = "".join(pick) + number[idx+1:] 11 | break 12 | 13 | if k > 0: # 아직 다 못뺌 14 | answer = "".join(pick[:-k]) 15 | return answer 16 | -------------------------------------------------------------------------------- /juhee2/2주차/K번째수.py: -------------------------------------------------------------------------------- 1 | # 첫번째 풀이 2 | # def solution(array, commands): 3 | # answer = [] 4 | # for i in range(len(commands)) : 5 | # result = sorted(array[commands[i][0] - 1 : commands[i][1]]) 6 | # answer.append(result[commands[i][-1] - 1]) 7 | # return answer 8 | 9 | # 두번째 풀이 10 | # def solution(array, commands): 11 | # answer = [] 12 | # for i in range(len(commands)) : 13 | # answer.append(sorted(array[commands[i][0] - 1 : commands[i][1]])[commands[i][-1] - 1]) 14 | # return answer 15 | 16 | # 세번째 풀이 17 | def solution(array, commands): 18 | return list(map(lambda com : sorted(array[com[0]-1:com[1]])[com[2]-1], commands)) 19 | -------------------------------------------------------------------------------- /juhee2/2주차/멀쩡한사각형.py: -------------------------------------------------------------------------------- 1 | from math import gcd # 최대 공약수 함수 import 2 | def solution(w,h): 3 | answer = 1 4 | 5 | n = gcd(w, h) 6 | unusable_squ = ((w // n) + (h // n) - 1) * n 7 | 8 | return (w * h) - unusable_squ 9 | -------------------------------------------------------------------------------- /juhee2/3주차/소수만들기.py: -------------------------------------------------------------------------------- 1 | # 첫번째 풀이 2 | # import itertools 3 | # def solution(nums): 4 | # combi = list(itertools.combinations(nums, 3)) 5 | # answer = 0 6 | # for i in combi: 7 | # hap = sum(i) 8 | # for div in range(2, sum(i)): 9 | # if hap % div == 0: 10 | # isPrime = False 11 | # break; 12 | # else: 13 | # isPrime = True 14 | # if isPrime: 15 | # answer += 1 16 | # return answer 17 | 18 | from itertools import combinations 19 | def solution(nums): 20 | answer = 0 21 | for combi in combinations(nums, 3): 22 | hap = sum(combi) 23 | for div in range(2, hap): 24 | if hap % div == 0: 25 | break 26 | else: 27 | answer += 1 28 | return answer 29 | 30 | -------------------------------------------------------------------------------- /juhee2/3주차/음양더하기.py: -------------------------------------------------------------------------------- 1 | # 첫번째 풀이 2 | # def solution(absolutes, signs): 3 | # answer = 123456789 4 | # return sum([absolutes[i] if signs[i] else absolutes[i] * (-1) for i in range(len(absolutes))]) 5 | 6 | def solution(absolutes, signs): 7 | return sum([a if s else -a for a,s in zip(absolutes, signs)]) 8 | -------------------------------------------------------------------------------- /juhee2/3주차/짝지어제거하기.py: -------------------------------------------------------------------------------- 1 | # 첫번째 풀이 2 | # def solution(s): 3 | # stack = [] 4 | # for str in s: 5 | # if len(stack) == 0: 6 | # stack.append(str) 7 | # elif stack[-1] == str: 8 | # stack.pop(-1) 9 | # else: 10 | # stack.append(str) 11 | # answer = 1 if len(stack) == 0 else 0 12 | 13 | # return answer 14 | 15 | def solution(s): 16 | stack = [] 17 | for str in s: 18 | if not stack: 19 | stack.append(str) 20 | continue 21 | if stack[-1] == str: 22 | stack.pop(-1) 23 | else: 24 | stack.append(str) 25 | 26 | return 1 if not stack else 0 27 | -------------------------------------------------------------------------------- /juhee2/4주차/기능개발.py: -------------------------------------------------------------------------------- 1 | def solution(progresses, speeds): 2 | answer = [] 3 | 4 | times = 0 5 | cnt = 0 6 | 7 | while progresses: 8 | if progresses[0] + times*speeds[0] >= 100: 9 | progresses.pop(0) 10 | speeds.pop(0) 11 | cnt += 1 12 | else: 13 | times += 1 14 | if cnt > 0: 15 | answer.append(cnt) 16 | cnt = 0 17 | 18 | answer.append(cnt) # progresses 마지막 요소 pop 하고 마지막 count 넣어주기! 19 | return answer 20 | 21 | -------------------------------------------------------------------------------- /juhee2/4주차/내적.py: -------------------------------------------------------------------------------- 1 | # def solution(a, b): 2 | # answer = 0 3 | # for i,j in zip(a,b) : 4 | # answer += (i*j) 5 | # return answer; 6 | 7 | def solution(a,b): 8 | return sum([i*j for i,j in zip(a,b)]) 9 | -------------------------------------------------------------------------------- /juhee2/5주차/더맵게.py: -------------------------------------------------------------------------------- 1 | import heapq 2 | 3 | def solution(scoville, K): 4 | spicy = 0 5 | answer = 0 6 | 7 | heapq.heapify(scoville) 8 | 9 | while len(scoville) > 1 and scoville[0] < K: 10 | spicy = heapq.heappop(scoville) + (heapq.heappop(scoville) * 2) 11 | heapq.heappush(scoville, spicy) 12 | answer += 1 13 | 14 | return answer if scoville[0] >= K else -1 15 | -------------------------------------------------------------------------------- /juhee2/6주차/예산.py: -------------------------------------------------------------------------------- 1 | def solution(d, budget): 2 | answer = 0 3 | d.sort() 4 | for dd in d : 5 | if budget - dd < 0: 6 | break; 7 | answer += 1 8 | budget -= dd 9 | return answer 10 | 11 | -------------------------------------------------------------------------------- /juhee2/6주차/오픈채팅방.py: -------------------------------------------------------------------------------- 1 | def solution(record): 2 | answer = [] 3 | 4 | commend = [r.split(' ') for r in record] 5 | user = {c[1] : c[2] for c in commend if c[0] != 'Leave'} 6 | 7 | for c in commend: 8 | if c[0] == 'Enter': 9 | answer.append('{}님이 들어왔습니다.'.format(user[c[1]])) 10 | elif c[0] == 'Leave': 11 | answer.append('{}님이 나갔습니다.'.format(user[c[1]])) 12 | return answer 13 | -------------------------------------------------------------------------------- /juhee2/7주차/문자열압축.py: -------------------------------------------------------------------------------- 1 | def solution(s): 2 | answer = 0 3 | result = [] 4 | 5 | if len(s) == 1: 6 | return 1 7 | 8 | for i in range(1, len(s) // 2 + 1): 9 | result.append(len(zip_str(s, i))) 10 | result.sort() 11 | 12 | return result[0] 13 | 14 | def zip_str(string, i): 15 | zip_result = "" 16 | repeat = 1 17 | for x in range(0,len(string),i): 18 | if string[x : x + i] == string[x + i : x + 2 * i]: 19 | repeat += 1 20 | else: 21 | zip_result += '{}{}'.format(repeat, string[x-i : x]) if repeat > 1 else string[x : x + i] 22 | repeat = 1 23 | return zip_result 24 | -------------------------------------------------------------------------------- /juhee2/7주차/실패율.py: -------------------------------------------------------------------------------- 1 | # 첫번째 풀이 (런타임 에러) 2 | # def solution(N, stages): 3 | # answer = [] 4 | # fail_rate = {} 5 | # people = len(stages) 6 | # for i in range(1, N+1): 7 | # cnt = stages.count(i) 8 | # rate = cnt / people 9 | # fail_rate[i] = rate 10 | # people -= cnt 11 | # answer = [i[0] for i in sorted(fail_rate.items(), key = lambda x : x[1], reverse = True)] 12 | # return answer 13 | 14 | def solution(N, stages): 15 | answer = [] 16 | fail_rate = {} 17 | people = len(stages) 18 | for i in range(1, N+1): 19 | rate = 0; 20 | if people > 0: 21 | cnt = stages.count(i) 22 | rate = cnt / people 23 | people -= cnt 24 | else : 25 | rate = 0 26 | fail_rate[i] = rate 27 | answer = [i[0] for i in sorted(fail_rate.items(), key = lambda x : x[1], reverse = True)] 28 | return answer 29 | -------------------------------------------------------------------------------- /juhee2/7주차/약수의개수와덧셈.py: -------------------------------------------------------------------------------- 1 | # 첫 번째 풀이 2 | # def solution(left, right): 3 | # answer = 0 4 | # for num in range(left, right + 1) : 5 | # cnt = 0 6 | # for i in range(1, num+1): 7 | # if num % i == 0: 8 | # cnt += 1 9 | # answer += num if cnt % 2 == 0 else -num 10 | 11 | # return answer 12 | 13 | # 두번째 풀이 14 | # 제곱근을 제외한 나머지 수들은 약수가 짝수개!!! 15 | def solution(left, right): 16 | answer = 0 17 | for num in range(left, right + 1) : 18 | if int(num ** 0.5) == num ** 0.5: 19 | answer -= num 20 | else: 21 | answer += num 22 | return answer 23 | -------------------------------------------------------------------------------- /juhee2/8주차/3진법뒤집기.py: -------------------------------------------------------------------------------- 1 | # def solution(n): 2 | 3 | # result = '' 4 | # while(divmod(n, 3)[0] >= 1): 5 | # n, r = divmod(n, 3) 6 | # result += str(r) 7 | # result += str(n) 8 | 9 | # return sum([(3**i) * int(result[::-1][i]) for i in range(len(result)) if result[::-1][i] != '0']) 10 | 11 | def solution(n): 12 | result = '' 13 | while n: 14 | result += str(n % 3) 15 | n = n // 3 16 | 17 | return int(result, 3) 18 | -------------------------------------------------------------------------------- /juhee2/8주차/두개뽑아서더하기.py: -------------------------------------------------------------------------------- 1 | # def solution(numbers): 2 | # answer = [] 3 | # s = set() 4 | # for i in range(len(numbers)) : 5 | # for j in range(len(numbers)) : 6 | # if (i == j): continue 7 | # s.add(numbers[i]+numbers[j]) 8 | # answer = sorted(s) 9 | # # for i in numbers: 10 | # # print(i) 11 | # return answer 12 | 13 | def solution(numbers): 14 | answer = [] 15 | for i in range(len(numbers)) : 16 | for j in range(len(numbers)) : 17 | if (i == j): continue 18 | answer.append(numbers[i]+numbers[j]) 19 | return sorted(list(set(answer))) 20 | -------------------------------------------------------------------------------- /juhee2/8주차/타겟넘버.py: -------------------------------------------------------------------------------- 1 | def solution(numbers, target): 2 | sup = [0] 3 | for num in numbers: 4 | sub = [] 5 | for sup_num in sup: 6 | sub.append(sup_num + num) 7 | sub.append(sup_num - num) 8 | sup = sub 9 | 10 | return sup.count(target) 11 | -------------------------------------------------------------------------------- /juhee2/9주차/2016년.py: -------------------------------------------------------------------------------- 1 | # def solution(a, b): 2 | # last_day = [31,29,31,30,31,30,31,31,30,31,30,31] 3 | # day = ['FRI','SAT','SUN','MON','TUE','WED','THU'] 4 | # answer = '' 5 | # days = 0 6 | # for i in range(0,a-1): 7 | # days += last_day[i] 8 | # days += b 9 | # days = days % 7 10 | # return day[days - 1] 11 | 12 | def solution(a, b): 13 | last_day = [31,29,31,30,31,30,31,31,30,31,30,31] 14 | day = ['FRI','SAT','SUN','MON','TUE','WED','THU'] 15 | 16 | return day[(sum([last_day[i] for i in range(0,a-1)]) + b) % 7 - 1] 17 | -------------------------------------------------------------------------------- /juhee2/9주차/[1차]비밀지도.py: -------------------------------------------------------------------------------- 1 | def solution(n, arr1, arr2): 2 | answer = [] 3 | for a,b in zip(arr1, arr2): 4 | format(a | b, 'b') 5 | row = ''.join(['#' if i == '1' else ' ' for i in format(a | b, 'b')]) 6 | row = ' ' * (n - len(row)) + row if len(row) < n else row 7 | answer.append(row) 8 | return answer 9 | -------------------------------------------------------------------------------- /juhee2/9주차/소수찾기.py: -------------------------------------------------------------------------------- 1 | from itertools import permutations as P 2 | import math 3 | 4 | def solution(numbers): 5 | answer = 0 6 | nums = list(numbers) 7 | pick_nums = set() 8 | 9 | for i in range(1,len(nums)+1): 10 | per_nums = list(P(nums, i)) 11 | for j in per_nums: 12 | # n = int(''.join(j)) 13 | # if n < 2: 14 | # continue 15 | pick_nums.add(int(''.join(j))) 16 | return len(list(filter(isPrime, pick_nums))) 17 | 18 | def isPrime(num): 19 | if num < 2: 20 | return False 21 | for i in range(2,int(math.sqrt(num))+1): 22 | if num % i == 0: 23 | return False 24 | return True 25 | -------------------------------------------------------------------------------- /juhee2/README.md: -------------------------------------------------------------------------------- 1 | # 🙊[juhee2](https://github.com/juhee2) 2 | 3 | |주차|문제1|문제2|문제3| 4 | |-----|-----|-----|-----| 5 | |1주차(210503~)|||| 6 | -------------------------------------------------------------------------------- /백준/Bronze/1000. A+B/A+B.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | Scanner sc = new Scanner(System.in); 6 | String[] s = sc.nextLine().split(" "); 7 | System.out.println(Integer.parseInt(s[0]) + Integer.parseInt(s[1])); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /백준/Bronze/1000. A+B/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] A+B - 1000 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1000) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14220 KB, 시간: 100 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation), 사칙연산(arithmetic), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 A+B를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/1008. A/B/A/B.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | Scanner sc = new Scanner(System.in); 6 | String[] s = sc.nextLine().split(" "); 7 | double result = (double)Integer.parseInt(s[0]) / (double)Integer.parseInt(s[1]); 8 | System.out.println(result); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /백준/Bronze/1008. A/B/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] A/B - 1008 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1008) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14476 KB, 시간: 116 ms 8 | 9 | ### 분류 10 | 11 | 구현, 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/10101. 삼각형 외우기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze IV] 삼각형 외우기 - 10101 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10101) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11544 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 기하학, 구현 12 | 13 | ### 문제 설명 14 | 15 |

창영이는 삼각형의 종류를 잘 구분하지 못한다. 따라서 프로그램을 이용해 이를 외우려고 한다.

16 | 17 |

삼각형의 세 각을 입력받은 다음,

18 | 19 | 25 | 26 |

를 출력하는 프로그램을 작성하시오.

27 | 28 | ### 입력 29 | 30 |

총 3개의 줄에 걸쳐 삼각형의 각의 크기가 주어진다. 모든 정수는 0보다 크고, 180보다 작다.

31 | 32 | ### 출력 33 | 34 |

문제의 설명에 따라 Equilateral, Isosceles, Scalene, Error 중 하나를 출력한다.

35 | 36 | -------------------------------------------------------------------------------- /백준/Bronze/1037. 약수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 약수 - 1037 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1037) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11672 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 수학, 정수론 12 | 13 | ### 문제 설명 14 | 15 |

양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/10807. 개수 세기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 개수 세기 - 10807 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10807) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11776 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현 12 | 13 | ### 문제 설명 14 | 15 |

총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/10807. 개수 세기/개수 세기.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.*; 3 | 4 | public class Main { 5 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int N = Integer.parseInt(bufferedReader.readLine()); // 입력 받을 수의 개수 9 | 10 | StringTokenizer numbers = new StringTokenizer(bufferedReader.readLine()); // 입력받은 수들 11 | Map numberMap = new HashMap<>(); 12 | for (int i = 0; i < N; i++) { 13 | int key = Integer.parseInt(numbers.nextToken()); 14 | int value = numberMap.getOrDefault(key, 0); 15 | numberMap.put(key, ++value); 16 | } 17 | int v = Integer.parseInt(bufferedReader.readLine()); // 찾으려는 수 18 | 19 | System.out.println(numberMap.getOrDefault(v, 0)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /백준/Bronze/10809. 알파벳 찾기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 알파벳 찾기 - 10809 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10809) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11600 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

20 | 21 | ### 출력 22 | 23 |

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

24 | 25 |

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/10809. 알파벳 찾기/알파벳 찾기.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | String S = bufferedReader.readLine(); 9 | for (int i = 97; i <= 122; i++) { 10 | bufferedWriter.write(S.indexOf(i) + " "); 11 | } 12 | bufferedWriter.close(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /백준/Bronze/1085. 직사각형에서 탈출/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 직사각형에서 탈출 - 1085 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1085) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11512 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 기하학, 수학 12 | 13 | ### 문제 설명 14 | 15 |

한수는 지금 (x, y)에 있다. 직사각형은 각 변이 좌표축에 평행하고, 왼쪽 아래 꼭짓점은 (0, 0), 오른쪽 위 꼭짓점은 (w, h)에 있다. 직사각형의 경계선까지 가는 거리의 최솟값을 구하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 x, y, w, h가 주어진다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 문제의 정답을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/1085. 직사각형에서 탈출/직사각형에서 탈출.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.util.Arrays; 5 | import java.util.StringTokenizer; 6 | 7 | public class Main { 8 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 9 | 10 | public static void main(String[] args) throws IOException { 11 | StringTokenizer st = new StringTokenizer(bufferedReader.readLine()); 12 | int x = Integer.parseInt(st.nextToken()); 13 | int y = Integer.parseInt(st.nextToken()); 14 | int w = Integer.parseInt(st.nextToken()); 15 | int h = Integer.parseInt(st.nextToken()); 16 | int[] length = {x, y, w - x, h - y}; 17 | Arrays.sort(length); 18 | System.out.println(length[0]); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /백준/Bronze/10870. 피보나치 수 5/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 피보나치 수 5 - 10870 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10870) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14244 KB, 시간: 104 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation), 수학(math), 재귀(recursion) 12 | 13 | ### 문제 설명 14 | 15 |

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

16 | 17 |

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

18 | 19 |

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

20 | 21 |

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

22 | 23 |

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

24 | 25 | ### 입력 26 | 27 |

첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다.

28 | 29 | ### 출력 30 | 31 |

첫째 줄에 n번째 피보나치 수를 출력한다.

32 | 33 | -------------------------------------------------------------------------------- /백준/Bronze/10870. 피보나치 수 5/피보나치 수 5.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | public class Main { 4 | 5 | public static int fibonacci (int num) { 6 | if (num == 0) { 7 | return 0; 8 | } else if (num == 1) { 9 | return 1; 10 | } else { 11 | return fibonacci(num - 1) + fibonacci(num -2); 12 | } 13 | } 14 | public static void main(String[] args) { 15 | Scanner sc = new Scanner(System.in); 16 | int num = sc.nextInt(); 17 | System.out.println(fibonacci(num)); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /백준/Bronze/10871. X보다 작은 수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] X보다 작은 수 - 10871 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10871) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 18036 KB, 시간: 316 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation) 12 | 13 | ### 문제 설명 14 | 15 |

정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

20 | 21 |

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

22 | 23 | ### 출력 24 | 25 |

X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/10871. X보다 작은 수/X보다 작은 수.kt: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader 2 | import java.io.InputStreamReader 3 | 4 | fun main() = with(BufferedReader(InputStreamReader(System.`in`))) { 5 | val X: Int = readLine().split(" ")[1].toInt() 6 | val A: List = readLine().split(" ") 7 | 8 | for (i in A) { 9 | if (i.toInt() < X) { 10 | print("$i ") 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /백준/Bronze/10872. 팩토리얼/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 팩토리얼 - 10872 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10872) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14240 KB, 시간: 108 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation), 수학(math), 조합론(combinatorics) 12 | 13 | -------------------------------------------------------------------------------- /백준/Bronze/10872. 팩토리얼/팩토리얼.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | // 재귀함수를 이용하여 팩토리얼을 구하여라. 4 | public class Main { 5 | public int factorial(int num) { 6 | if (num == 1 || num == 0) { 7 | return 1; 8 | } 9 | return num * factorial(num - 1); 10 | } 11 | 12 | public static void main(String[] args) { 13 | Scanner sc = new Scanner(System.in); 14 | int num = sc.nextInt(); 15 | 16 | Main q10872 = new Main(); 17 | System.out.println(q10872.factorial(num)); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /백준/Bronze/10988. 팰린드롬인지 확인하기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 팰린드롬인지 확인하기 - 10988 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10988) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11500 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.

16 | 17 |

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.

18 | 19 |

level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

24 | 25 | ### 출력 26 | 27 |

첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Bronze/10988. 팰린드롬인지 확인하기/팰린드롬인지 확인하기.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | char[] word = bufferedReader.readLine().toCharArray(); 10 | 11 | int result = 1; 12 | for (int i = 0; i < word.length; i++) { 13 | if (word[i] != word[word.length - i - 1]) { 14 | result = 0; 15 | break; 16 | } 17 | } 18 | 19 | System.out.println(result); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /백준/Bronze/10989. 수 정렬하기 3/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 수 정렬하기 3 - 10989 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10989) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 509508 KB, 시간: 2640 ms 8 | 9 | ### 분류 10 | 11 | 정렬(sorting) 12 | 13 | ### 문제 설명 14 | 15 |

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/11005. 진법 변환 2/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 진법 변환 2 - 11005 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11005) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11628 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 구현, 수학 12 | 13 | ### 문제 설명 14 | 15 |

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

16 | 17 |

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

18 | 19 |

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

24 | 25 | ### 출력 26 | 27 |

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Bronze/11021. A+B - 7/A+B - 7.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int T = Integer.parseInt(bufferedReader.readLine()); // 테스트 케이스 개수 9 | 10 | for (int i = 1; i <= T; i++) { 11 | String[] input = bufferedReader.readLine().split(" "); 12 | int sum = Integer.parseInt(input[0]) + Integer.parseInt(input[1]); 13 | 14 | String result = String.format("Case #%d: %d\n", i, sum); 15 | bufferedWriter.write(result); 16 | } 17 | 18 | bufferedWriter.close(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /백준/Bronze/11021. A+B - 7/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] A+B - 7 - 11021 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11021) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11980 KB, 시간: 100 ms 8 | 9 | ### 분류 10 | 11 | 구현, 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 테스트 케이스의 개수 T가 주어진다.

20 | 21 |

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

22 | 23 | ### 출력 24 | 25 |

각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/1110. 더하기 사이클/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 더하기 사이클 - 1110 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1110) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11576 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현, 수학 12 | 13 | ### 문제 설명 14 | 15 |

0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.

16 | 17 |

26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.

18 | 19 |

위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.

20 | 21 |

N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.

22 | 23 | ### 입력 24 | 25 |

첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.

26 | 27 | ### 출력 28 | 29 |

첫째 줄에 N의 사이클 길이를 출력한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Bronze/11382. 꼬마 정민/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 꼬마 정민 - 11382 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11382) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11524 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현, 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

꼬마 정민이는 이제 A + B 정도는 쉽게 계산할 수 있다. 이제 A + B + C를 계산할 차례이다!

16 | 17 | ### 입력 18 | 19 |

첫 번째 줄에 A, B, C (1 ≤ A, B, C ≤ 1012)이 공백을 사이에 두고 주어진다.

20 | 21 | ### 출력 22 | 23 |

A+B+C의 값을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/11382. 꼬마 정민/꼬마 정민.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.StringTokenizer; 3 | 4 | public class Main { 5 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine()); 9 | long A = Long.parseLong(stringTokenizer.nextToken()); 10 | long B = Long.parseLong(stringTokenizer.nextToken()); 11 | long C = Long.parseLong(stringTokenizer.nextToken()); 12 | 13 | long result = A + B + C; 14 | 15 | System.out.println(result); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /백준/Bronze/1152. 단어의 개수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 단어의 개수 - 1152 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1152) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 19512 KB, 시간: 176 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.

16 | 17 | ### 입력 18 | 19 |

첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 단어의 개수를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/1152. 단어의 개수/단어의 개수.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.Arrays; 3 | import java.util.StringTokenizer; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | StringTokenizer S = new StringTokenizer(bufferedReader.readLine()); 10 | System.out.println(S.countTokens()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /백준/Bronze/1157. 단어 공부/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 단어 공부 - 1157 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1157) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 127868 KB, 시간: 600 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/11653. 소인수분해/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 소인수분해 - 11653 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11653) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11608 KB, 시간: 112 ms 8 | 9 | ### 분류 10 | 11 | 수학, 정수론, 소수 판정 12 | 13 | ### 문제 설명 14 | 15 |

정수 N이 주어졌을 때, 소인수분해하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 정수 N (1 ≤ N ≤ 10,000,000)이 주어진다.

20 | 21 | ### 출력 22 | 23 |

N의 소인수분해 결과를 한 줄에 하나씩 오름차순으로 출력한다. N이 1인 경우 아무것도 출력하지 않는다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/11653. 소인수분해/소인수분해.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | 6 | public static void main(String[] args) throws IOException { 7 | int N = Integer.parseInt(bufferedReader.readLine()); 8 | if (N == 1) { 9 | return; 10 | } 11 | 12 | int i = 2; 13 | while (N > 1) { 14 | while (N % i == 0 && N > 1) { 15 | N /= i; 16 | System.out.println(i); 17 | } 18 | i++; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /백준/Bronze/11654. 아스키 코드/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 아스키 코드 - 11654 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11654) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11484 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현 12 | 13 | ### 문제 설명 14 | 15 |

알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

알파벳 소문자, 대문자, 숫자 0-9 중 하나가 첫째 줄에 주어진다.

20 | 21 | ### 출력 22 | 23 |

입력으로 주어진 글자의 아스키 코드 값을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/11654. 아스키 코드/아스키 코드.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | 6 | public static void main(String[] args) throws IOException { 7 | int word = bufferedReader.readLine().charAt(0); 8 | System.out.println(word); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /백준/Bronze/11718. 그대로 출력하기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 그대로 출력하기 - 11718 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11718) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 12096 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

입력 받은 대로 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.

20 | 21 | ### 출력 22 | 23 |

입력받은 그대로 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/11718. 그대로 출력하기/그대로 출력하기.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | 6 | public static void main(String[] args) throws IOException { 7 | String s; 8 | while((s = bufferedReader.readLine()) != null){ 9 | System.out.println(s); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /백준/Bronze/11720. 숫자의 합/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze IV] 숫자의 합 - 11720 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11720) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11500 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 구현, 수학, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

20 | 21 | ### 출력 22 | 23 |

입력으로 주어진 숫자 N개의 합을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/11720. 숫자의 합/숫자의 합.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | int N = Integer.parseInt(bufferedReader.readLine()); // 숫자개수 10 | char[] numbers = bufferedReader.readLine().toCharArray(); // 입력된 숫자 11 | long result = 0; 12 | for (char number : numbers) { 13 | result += Integer.parseInt(String.valueOf(number)); 14 | } 15 | 16 | System.out.print(result); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /백준/Bronze/13458. 시험 감독/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 시험 감독 - 13458 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/13458) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 117504 KB, 시간: 388 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

총 N개의 시험장이 있고, 각각의 시험장마다 응시자들이 있다. i번 시험장에 있는 응시자의 수는 Ai명이다.

16 | 17 |

감독관은 총감독관과 부감독관으로 두 종류가 있다. 총감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 B명이고, 부감독관은 한 시험장에서 감시할 수 있는 응시자의 수가 C명이다.

18 | 19 |

각각의 시험장에 총감독관은 오직 1명만 있어야 하고, 부감독관은 여러 명 있어도 된다.

20 | 21 |

각 시험장마다 응시생들을 모두 감시해야 한다. 이때, 필요한 감독관 수의 최솟값을 구하는 프로그램을 작성하시오.

22 | 23 | ### 입력 24 | 25 |

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

26 | 27 |

둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다.

28 | 29 |

셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

30 | 31 | ### 출력 32 | 33 |

각 시험장마다 응시생을 모두 감독하기 위해 필요한 감독관의 최소 수를 출력한다.

34 | 35 | -------------------------------------------------------------------------------- /백준/Bronze/14215. 세 막대/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 세 막대 - 14215 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/14215) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11572 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 기하학, 구현, 수학 12 | 13 | ### 문제 설명 14 | 15 |

영선이는 길이가 a, b, c인 세 막대를 가지고 있고, 각 막대의 길이를 마음대로 줄일 수 있다.

16 | 17 |

영선이는 세 막대를 이용해서 아래 조건을 만족하는 삼각형을 만들려고 한다.

18 | 19 |
    20 |
  • 각 막대의 길이는 양의 정수이다
  • 21 |
  • 세 막대를 이용해서 넓이가 양수인 삼각형을 만들 수 있어야 한다.
  • 22 |
  • 삼각형의 둘레를 최대로 해야 한다.
  • 23 |
24 | 25 |

a, b, c가 주어졌을 때, 만들 수 있는 가장 큰 둘레를 구하는 프로그램을 작성하시오.

26 | 27 | ### 입력 28 | 29 |

첫째 줄에 a, b, c (1 ≤ a, b, c ≤ 100)가 주어진다.

30 | 31 | ### 출력 32 | 33 |

첫째 줄에 만들 수 있는 가장 큰 삼각형의 둘레를 출력한다.

34 | 35 | -------------------------------------------------------------------------------- /백준/Bronze/14215. 세 막대/세 막대.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.Arrays; 3 | import java.util.StringTokenizer; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | StringTokenizer line = new StringTokenizer(bufferedReader.readLine()); 10 | int a = Integer.parseInt(line.nextToken()); 11 | int b = Integer.parseInt(line.nextToken()); 12 | int c = Integer.parseInt(line.nextToken()); 13 | 14 | int[] sort = {a, b, c}; 15 | Arrays.sort(sort); 16 | 17 | if (sort[0] + sort[1] <= sort[2]) { 18 | sort[2] = sort[0] + sort[1] - 1; 19 | } 20 | int result = sort[0] + sort[1] + sort[2]; 21 | 22 | System.out.println(result); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /백준/Bronze/15439. 베라의 패션/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze IV] 베라의 패션 - 15439 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/15439) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11532 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 구현, 조합론, 수학 12 | 13 | ### 문제 설명 14 | 15 |

베라는 상의 N 벌과 하의 N 벌이 있다. i 번째 상의와 i 번째 하의는 모두 색상 i를 가진다. N 개의 색상은 모두 서로 다르다.

16 | 17 |

상의와 하의가 서로 다른 색상인 조합은 총 몇 가지일까?

18 | 19 | ### 입력 20 | 21 |

입력은 아래와 같이 주어진다.

22 | 23 |
N
24 | 25 | ### 출력 26 | 27 |

상의와 하의가 서로 다른 색상인 조합의 가짓수를 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Bronze/15439. 베라의 패션/베라의 패션.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int N = Integer.parseInt(bufferedReader.readLine()); 9 | 10 | int result = N * N - N; 11 | bufferedWriter.write(String.valueOf(result)); 12 | bufferedWriter.flush(); 13 | bufferedWriter.close(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /백준/Bronze/1546. 평균/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 평균 - 1546 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1546) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11904 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산(arithmetic), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

16 | 17 |

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

18 | 19 |

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

24 | 25 | ### 출력 26 | 27 |

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Bronze/18108. 1998년생인 내가 태국에서는 2541년생?!/1998년생인 내가 태국에서는 2541년생?!.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 6 | 7 | int year = Integer.parseInt(reader.readLine()); 8 | 9 | System.out.println(year - 543); 10 | } 11 | } -------------------------------------------------------------------------------- /백준/Bronze/18108. 1998년생인 내가 태국에서는 2541년생?!/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 1998년생인 내가 태국에서는 2541년생?! - 18108 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/18108) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11504 KB, 시간: 72 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산(arithmetic), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.

16 | 17 |

불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

18 | 19 | ### 입력 20 | 21 |

서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)

22 | 23 | ### 출력 24 | 25 |

불기 연도를 서기 연도로 변환한 결과를 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/1934. 최소공배수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 최소공배수 - 1934 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1934) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 17008 KB, 시간: 236 ms 8 | 9 | ### 분류 10 | 11 | 유클리드 호제법, 수학, 정수론 12 | 13 | ### 문제 설명 14 | 15 |

두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다.

16 | 17 |

두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 둘째 줄부터 T개의 줄에 걸쳐서 A와 B가 주어진다. (1 ≤ A, B ≤ 45,000)

22 | 23 | ### 출력 24 | 25 |

첫째 줄부터 T개의 줄에 A와 B의 최소공배수를 입력받은 순서대로 한 줄에 하나씩 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/1978. 소수 찾기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 소수 찾기 - 1978 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1978) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11724 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 소수 판정, 정수론, 수학 12 | 13 | ### 문제 설명 14 | 15 |

주어진 수 N개 중에서 소수가 몇 개인지 찾아서 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

20 | 21 | ### 출력 22 | 23 |

주어진 수들 중 소수의 개수를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/20492. 세금/세금.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | 6 | public static void main(String[] args) throws IOException { 7 | int n = Integer.parseInt(bufferedReader.readLine()); 8 | int result1 = (int) (n * 0.78); 9 | int result2 = (int) (n - ((n * 0.20) * 0.22)); 10 | System.out.println(result1 + " " + result2); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /백준/Bronze/2292. 벌집/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 벌집 - 2292 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2292) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11472 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 수학 12 | 13 | ### 문제 설명 14 | 15 |

16 | 17 |

위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다.

22 | 23 | ### 출력 24 | 25 |

입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/2292. 벌집/벌집.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | int room = Integer.parseInt(bufferedReader.readLine()); 10 | 11 | int roomCount = 1; 12 | int result = 1; 13 | while(roomCount < room) { 14 | roomCount += (6 * result); 15 | result++; 16 | } 17 | 18 | System.out.println(result); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /백준/Bronze/2438. 별 찍기 - 1/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 별 찍기 - 1 - 2438 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2438) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11644 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation) 12 | 13 | ### 문제 설명 14 | 15 |

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/2438. 별 찍기 - 1/별 찍기 - 1.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 6 | int input = Integer.parseInt(reader.readLine()); 7 | 8 | StringBuilder result = new StringBuilder(); 9 | 10 | for (int x = 1; x <= input; x++) { 11 | for (int y = 1; y <= x; y++) { 12 | result.append("*"); 13 | } 14 | if (x != input) { 15 | result.append("\n"); 16 | } 17 | } 18 | 19 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 20 | writer.write(result.toString()); 21 | writer.flush(); 22 | writer.close(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /백준/Bronze/2439. 별 찍기 - 2/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze IV] 별 찍기 - 2 - 2439 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2439) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11720 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation) 12 | 13 | ### 문제 설명 14 | 15 |

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

16 | 17 |

하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

22 | 23 | ### 출력 24 | 25 |

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/2444. 별 찍기 - 7/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 별 찍기 - 7 - 2444 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2444) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14364 KB, 시간: 132 ms 8 | 9 | ### 분류 10 | 11 | 구현 12 | 13 | ### 문제 설명 14 | 15 |

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/2444. 별 찍기 - 7/별 찍기 - 7.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int N = Integer.parseInt(bufferedReader.readLine()); 9 | String[] stars = new String[N]; 10 | for(int i = 1; i <= ((2 * N) - 1); i++) { 11 | if (i <= N) { 12 | String star = " ".repeat(N - i) + "*".repeat((i * 2) - 1); 13 | stars[i - 1] = star; 14 | bufferedWriter.write(star + "\n"); 15 | } 16 | } 17 | for(int i = N - 2; i >= 0; i--) { 18 | bufferedWriter.write(stars[i] + "\n"); 19 | } 20 | bufferedWriter.close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Bronze/24723. 녹색거탑/녹색거탑.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int N = Integer.parseInt(bufferedReader.readLine()); 9 | 10 | int result = (int) Math.pow(2, N); 11 | bufferedWriter.write(String.valueOf(result)); 12 | bufferedWriter.flush(); 13 | bufferedWriter.close(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /백준/Bronze/2475. 검증수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 검증수 - 2475 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2475) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11504 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 구현, 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

컴퓨터를 제조하는 회사인 KOI 전자에서는 제조하는 컴퓨터마다 6자리의 고유번호를 매긴다. 고유번호의 처음 5자리에는 00000부터 99999까지의 수 중 하나가 주어지며 6번째 자리에는 검증수가 들어간다. 검증수는 고유번호의 처음 5자리에 들어가는 5개의 숫자를 각각 제곱한 수의 합을 10으로 나눈 나머지이다.

16 | 17 |

예를 들어 고유번호의 처음 5자리의 숫자들이 04256이면, 각 숫자를 제곱한 수들의 합 0+16+4+25+36 = 81 을 10으로 나눈 나머지인 1이 검증수이다.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 고유번호의 처음 5자리의 숫자들이 빈칸을 사이에 두고 하나씩 주어진다.

22 | 23 | ### 출력 24 | 25 |

첫째 줄에 검증수를 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/2475. 검증수/검증수.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.StringTokenizer; 3 | 4 | public class Main { 5 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | StringTokenizer line = new StringTokenizer(bufferedReader.readLine()); 9 | 10 | int all = 0; 11 | for (int i = 0; i < 5; i++) { 12 | int a = Integer.parseInt(line.nextToken()); 13 | all += (a * a); 14 | } 15 | int result = all % 10; 16 | 17 | System.out.println(result); 18 | } 19 | } -------------------------------------------------------------------------------- /백준/Bronze/2480. 주사위 세개/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze IV] 주사위 세개 - 2480 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2480) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11628 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산(arithmetic), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

16 | 17 |
    18 |
  1. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다.
  2. 19 |
  3. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다.
  4. 20 |
  5. 모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.
  6. 21 |
22 | 23 |

예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다. 또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다. 3개의 눈이 6, 2, 5로 주어지면 그중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

24 | 25 |

3개 주사위의 나온 눈이 주어질 때, 상금을 계산하는 프로그램을 작성 하시오.

26 | 27 | ### 입력 28 | 29 |

첫째 줄에 3개의 눈이 빈칸을 사이에 두고 각각 주어진다.

30 | 31 | ### 출력 32 | 33 |

첫째 줄에 게임의 상금을 출력 한다.

34 | 35 | -------------------------------------------------------------------------------- /백준/Bronze/2501. 약수 구하기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 약수 구하기 - 2501 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2501) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11544 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 브루트포스 알고리즘, 수학 12 | 13 | ### 문제 설명 14 | 15 |

어떤 자연수 p와 q가 있을 때, 만일 p를 q로 나누었을 때 나머지가 0이면 q는 p의 약수이다.

16 | 17 |

6을 예로 들면

18 | 19 |
    20 |
  • 6 ÷ 1 = 6 … 0
  • 21 |
  • 6 ÷ 2 = 3 … 0
  • 22 |
  • 6 ÷ 3 = 2 … 0
  • 23 |
  • 6 ÷ 4 = 1 … 2
  • 24 |
  • 6 ÷ 5 = 1 … 1
  • 25 |
  • 6 ÷ 6 = 1 … 0
  • 26 |
27 | 28 |

그래서 6의 약수는 1, 2, 3, 6, 총 네 개이다.

29 | 30 |

두 개의 자연수 N과 K가 주어졌을 때, N의 약수들 중 K번째로 작은 수를 출력하는 프로그램을 작성하시오.

31 | 32 | ### 입력 33 | 34 |

첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다.

35 | 36 | ### 출력 37 | 38 |

첫째 줄에 N의 약수들 중 K번째로 작은 수를 출력한다. 만일 N의 약수의 개수가 K개보다 적어서 K번째 약수가 존재하지 않을 경우에는 0을 출력하시오.

39 | 40 | -------------------------------------------------------------------------------- /백준/Bronze/25083. 새싹/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 새싹 - 25083 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/25083) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11328 KB, 시간: 72 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation) 12 | 13 | ### 문제 설명 14 | 15 |

아래 예제와 같이 새싹을 출력하시오.

16 | 17 | ### 입력 18 | 19 |

입력은 없다.

20 | 21 | ### 출력 22 | 23 |

새싹을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/25083. 새싹/새싹.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | System.out.println(" ,r'\"7"); 6 | System.out.println("r`-_ ,' ,/"); 7 | System.out.println(" \\. \". L_r'"); 8 | System.out.println(" `~\\/"); 9 | System.out.println(" |"); 10 | System.out.println(" |"); 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /백준/Bronze/2525. 오븐 시계/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 오븐 시계 - 2525 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2525) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11580 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산(arithmetic), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

KOI 전자에서는 건강에 좋고 맛있는 훈제오리구이 요리를 간편하게 만드는 인공지능 오븐을 개발하려고 한다. 인공지능 오븐을 사용하는 방법은 적당한 양의 오리 훈제 재료를 인공지능 오븐에 넣으면 된다. 그러면 인공지능 오븐은 오븐구이가 끝나는 시간을 분 단위로 자동적으로 계산한다.

16 | 17 |

또한, KOI 전자의 인공지능 오븐 앞면에는 사용자에게 훈제오리구이 요리가 끝나는 시각을 알려 주는 디지털 시계가 있다.

18 | 19 |

훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다.

24 | 25 | ### 출력 26 | 27 |

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

28 | 29 | -------------------------------------------------------------------------------- /백준/Bronze/25314. 코딩은 체육과목 입니다/코딩은 체육과목 입니다.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int N = Integer.parseInt(bufferedReader.readLine()); // N 바이트 9 | 10 | int count = N / 4; 11 | for (int i = 0; i < count; i++) { 12 | bufferedWriter.write("long "); 13 | } 14 | bufferedWriter.write("int"); 15 | bufferedWriter.close(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /백준/Bronze/2581. 소수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 소수 - 2581 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2581) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 12532 KB, 시간: 120 ms 8 | 9 | ### 분류 10 | 11 | 소수 판정, 정수론, 수학 12 | 13 | ### 문제 설명 14 | 15 |

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

16 | 17 |

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

18 | 19 | ### 입력 20 | 21 |

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

22 | 23 |

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

24 | 25 | ### 출력 26 | 27 |

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.

28 | 29 |

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Bronze/2587. 대표값2/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 대표값2 - 2587 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2587) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11476 KB, 시간: 72 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산, 구현, 수학, 정렬 12 | 13 | ### 문제 설명 14 | 15 |

어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + 30) / 5 = 170 / 5 = 34가 된다.

16 | 17 |

평균 이외의 또 다른 대표값으로 중앙값이라는 것이 있다. 중앙값은 주어진 수를 크기 순서대로 늘어 놓았을 때 가장 중앙에 놓인 값이다. 예를 들어 10, 40, 30, 60, 30의 경우, 크기 순서대로 늘어 놓으면

18 | 19 |

10 30 30 40 60

20 | 21 |

이 되고 따라서 중앙값은 30이 된다.

22 | 23 |

다섯 개의 자연수가 주어질 때 이들의 평균과 중앙값을 구하는 프로그램을 작성하시오.

24 | 25 | ### 입력 26 | 27 |

첫째 줄부터 다섯 번째 줄까지 한 줄에 하나씩 자연수가 주어진다. 주어지는 자연수는 100 보다 작은 10의 배수이다.

28 | 29 | ### 출력 30 | 31 |

첫째 줄에는 평균을 출력하고, 둘째 줄에는 중앙값을 출력한다. 평균과 중앙값은 모두 자연수이다.

32 | 33 | -------------------------------------------------------------------------------- /백준/Bronze/2587. 대표값2/대표값2.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.util.Arrays; 5 | 6 | public class Main { 7 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 8 | 9 | public static void main(String[] args) throws IOException { 10 | int[] numbers = new int[5]; 11 | int avr = 0; 12 | for (int i = 0; i < 5; i++) { 13 | int number = Integer.parseInt(bufferedReader.readLine()); 14 | numbers[i] = number; 15 | avr += number; 16 | } 17 | Arrays.sort(numbers); 18 | int result1 = avr / 5; 19 | System.out.println(result1); 20 | System.out.println(numbers[2]); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Bronze/2605. 줄 세우기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 줄 세우기 - 2605 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2605) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 18408 KB, 시간: 220 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 구현(implementation), 연결 리스트(linked_list) 12 | 13 | -------------------------------------------------------------------------------- /백준/Bronze/2675. 문자열 반복/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 문자열 반복 - 2675 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2675) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14120 KB, 시간: 120 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.

16 | 17 |

QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.

22 | 23 | ### 출력 24 | 25 |

각 테스트 케이스에 대해 P를 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/27323. 직사각형/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 직사각형 - 27323 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/27323) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11480 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산, 기하학, 수학 12 | 13 | ### 문제 설명 14 | 15 |

정수 A, B 가 주어진다. 세로 길이가 A cm, 가로 길이가 B cm 인 아래와 같은 직사각형의 넓이를 cm2 단위로 구하시오.

16 | 17 |

18 | 19 | ### 입력 20 | 21 |

표준 입력에 다음과 같은 형태로 입력이 주어진다.

22 | 23 |
A
24 | B
25 | 26 | ### 출력 27 | 28 |

세로 길이가 A cm, 가로 길이가 B cm인 직사각형의 넓이를 cm2 단위로 구하고, 단위 (cm2)를 생략하여 출력한다.

29 | 30 | -------------------------------------------------------------------------------- /백준/Bronze/27323. 직사각형/직사각형.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | int A = Integer.parseInt(bufferedReader.readLine()); 10 | int B = Integer.parseInt(bufferedReader.readLine()); 11 | System.out.println(A * B); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /백준/Bronze/2738. 행렬 덧셈/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 행렬 덧셈 - 2738 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2738) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 13700 KB, 시간: 124 ms 8 | 9 | ### 분류 10 | 11 | 구현, 수학 12 | 13 | ### 문제 설명 14 | 15 |

N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/2739. 구구단/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 구구단 - 2739 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2739) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11600 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 9보다 작거나 같다.

20 | 21 | ### 출력 22 | 23 |

출력형식과 같게 N*1부터 N*9까지 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/2739. 구구단/구구단.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 6 | int input = Integer.parseInt(reader.readLine()); 7 | 8 | StringBuilder result = new StringBuilder(); 9 | 10 | for (int x = 1; x < 10; x++) { 11 | result.append(input); 12 | result.append(" * "); 13 | result.append(x); 14 | result.append(" = "); 15 | result.append(input * x); 16 | if (x != 9) { 17 | result.append("\n"); 18 | } 19 | } 20 | 21 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 22 | writer.write(result.toString()); 23 | writer.flush(); 24 | writer.close(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /백준/Bronze/2741. N 찍기/N 찍기.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 6 | int input = Integer.parseInt(reader.readLine()); 7 | 8 | StringBuilder result = new StringBuilder(); 9 | 10 | for (int x = 1; x <= input; x++) { 11 | result.append(x); 12 | if (x != input) { 13 | result.append("\n"); 14 | } 15 | } 16 | 17 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 18 | writer.write(result.toString()); 19 | writer.flush(); 20 | writer.close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Bronze/2741. N 찍기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] N 찍기 - 2741 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2741) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 17248 KB, 시간: 168 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation) 12 | 13 | ### 문제 설명 14 | 15 |

자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N번째 줄 까지 차례대로 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/2743. 단어 길이 재기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 단어 길이 재기 - 2743 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2743) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11584 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

알파벳으로만 이루어진 단어를 입력받아, 그 길이를 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 입력으로 주어진 단어의 길이를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/2743. 단어 길이 재기/단어 길이 재기.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | String word = bufferedReader.readLine(); 9 | System.out.println(word.length()); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /백준/Bronze/27433. 팩토리얼 2/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 팩토리얼 2 - 27433 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/27433) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11580 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 정수 N(0 ≤ N ≤ 20)이 주어진다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 N!을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/27433. 팩토리얼 2/팩토리얼 2.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int N = Integer.parseInt(bufferedReader.readLine()); 9 | 10 | long result = 1; 11 | if (N != 0) { 12 | result = pivo(N); 13 | } 14 | bufferedWriter.write(String.valueOf(result)); 15 | bufferedWriter.flush(); 16 | bufferedWriter.close(); 17 | } 18 | 19 | private static long pivo(long number) { 20 | if (number == 1) { 21 | return number; 22 | } 23 | return number * pivo(number - 1); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /백준/Bronze/2745. 진법 변환/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 진법 변환 - 2745 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2745) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14240 KB, 시간: 128 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열, 수학 12 | 13 | ### 문제 설명 14 | 15 |

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오.

16 | 17 |

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

18 | 19 |

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36)

24 | 25 |

B진법 수 N을 10진법으로 바꾸면, 항상 10억보다 작거나 같다.

26 | 27 | ### 출력 28 | 29 |

첫째 줄에 B진법 수 N을 10진법으로 출력한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Bronze/2745. 진법 변환/진법 변환.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.util.StringTokenizer; 5 | 6 | public class Main { 7 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 8 | 9 | public static void main(String[] args) throws IOException { 10 | StringTokenizer line = new StringTokenizer(bufferedReader.readLine()); 11 | 12 | String N = line.nextToken(); 13 | int B = Integer.parseInt(line.nextToken()); 14 | 15 | System.out.println(Integer.parseInt(N,B)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /백준/Bronze/2747. 피보나치 수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 피보나치 수 - 2747 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2747) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11576 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

16 | 17 |

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

18 | 19 |

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

20 | 21 |

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

22 | 23 |

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

24 | 25 | ### 입력 26 | 27 |

첫째 줄에 n이 주어진다. n은 45보다 작거나 같은 자연수이다.

28 | 29 | ### 출력 30 | 31 |

첫째 줄에 n번째 피보나치 수를 출력한다.

32 | 33 | -------------------------------------------------------------------------------- /백준/Bronze/2747. 피보나치 수/피보나치 수.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 6 | int count = Integer.parseInt(reader.readLine()); 7 | 8 | int a = 0; 9 | int b = 1; 10 | 11 | while(count-- > 0) { 12 | int tmp = a; 13 | a = b; 14 | b = tmp + b; 15 | } 16 | 17 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 18 | writer.write(Integer.toString(a)); 19 | writer.flush(); 20 | writer.close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Bronze/2750. 수 정렬하기/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 수 정렬하기 - 2750 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2750) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 12532 KB, 시간: 144 ms 8 | 9 | ### 분류 10 | 11 | 정렬, 구현 12 | 13 | ### 문제 설명 14 | 15 |

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/2750. 수 정렬하기/수 정렬하기.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.Arrays; 3 | 4 | public class Main { 5 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int n = Integer.parseInt(bufferedReader.readLine()); 9 | int[] numbers = new int[n]; 10 | for (int i = 0; i < n; i++) { 11 | numbers[i] = Integer.parseInt(bufferedReader.readLine()); 12 | } 13 | Arrays.sort(numbers); 14 | for (int number : numbers) { 15 | System.out.println(number); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /백준/Bronze/2869. 달팽이는 올라가고 싶다/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 달팽이는 올라가고 싶다 - 2869 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2869) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11528 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 수학 12 | 13 | ### 문제 설명 14 | 15 |

땅 위에 달팽이가 있다. 이 달팽이는 높이가 V미터인 나무 막대를 올라갈 것이다.

16 | 17 |

달팽이는 낮에 A미터 올라갈 수 있다. 하지만, 밤에 잠을 자는 동안 B미터 미끄러진다. 또, 정상에 올라간 후에는 미끄러지지 않는다.

18 | 19 |

달팽이가 나무 막대를 모두 올라가려면, 며칠이 걸리는지 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000)

24 | 25 | ### 출력 26 | 27 |

첫째 줄에 달팽이가 나무 막대를 모두 올라가는데 며칠이 걸리는지 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Bronze/2869. 달팽이는 올라가고 싶다/달팽이는 올라가고 싶다.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.util.StringTokenizer; 5 | 6 | public class Main { 7 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 8 | 9 | public static void main(String[] args) throws IOException { 10 | StringTokenizer line = new StringTokenizer(bufferedReader.readLine()); 11 | 12 | int A = Integer.parseInt(line.nextToken()); // 낮에 올라가는 높이 13 | int B = Integer.parseInt(line.nextToken()); // 미끄러지는 높이 14 | int V = Integer.parseInt(line.nextToken()); // 높이 15 | 16 | int day = (int) Math.ceil((double)(V - A) / (double)(A - B)); 17 | System.out.println(day + 1); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /백준/Bronze/2884. 알람 시계/알람 시계.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.StringTokenizer; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 7 | StringTokenizer tokenizer = new StringTokenizer(reader.readLine()); 8 | int hour = Integer.parseInt(tokenizer.nextToken()); 9 | int min = Integer.parseInt(tokenizer.nextToken()); 10 | 11 | min -= 45; 12 | hour = min < 0 ? (hour - 1 < 0 ? 23 : hour - 1) : hour; 13 | min = min < 0 ? min + 60 : min; 14 | 15 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 16 | writer.write(Integer.toString(hour)); 17 | writer.write(" "); 18 | writer.write(Integer.toString(min)); 19 | writer.flush(); 20 | writer.close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Bronze/2903. 중앙 이동 알고리즘/중앙 이동 알고리즘.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | int N = Integer.parseInt(bufferedReader.readLine()); 10 | 11 | int dots = 2; 12 | for (int i = 0; i < N; i++) { 13 | dots += (dots - 1); 14 | } 15 | 16 | System.out.println(dots * dots); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /백준/Bronze/3003. 킹, 퀸, 룩, 비숍, 나이트, 폰/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 킹, 퀸, 룩, 비숍, 나이트, 폰 - 3003 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/3003) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11596 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현, 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

동혁이는 오래된 창고를 뒤지다가 낡은 체스판과 피스를 발견했다.

16 | 17 |

체스판의 먼지를 털어내고 걸레로 닦으니 그럭저럭 쓸만한 체스판이 되었다. 하지만, 검정색 피스는 모두 있었으나, 흰색 피스는 개수가 올바르지 않았다.

18 | 19 |

체스는 총 16개의 피스를 사용하며, 킹 1개, 퀸 1개, 룩 2개, 비숍 2개, 나이트 2개, 폰 8개로 구성되어 있다.

20 | 21 |

동혁이가 발견한 흰색 피스의 개수가 주어졌을 때, 몇 개를 더하거나 빼야 올바른 세트가 되는지 구하는 프로그램을 작성하시오.

22 | 23 | ### 입력 24 | 25 |

첫째 줄에 동혁이가 찾은 흰색 킹, 퀸, 룩, 비숍, 나이트, 폰의 개수가 주어진다. 이 값은 0보다 크거나 같고 10보다 작거나 같은 정수이다.

26 | 27 | ### 출력 28 | 29 |

첫째 줄에 입력에서 주어진 순서대로 몇 개의 피스를 더하거나 빼야 되는지를 출력한다. 만약 수가 양수라면 동혁이는 그 개수 만큼 피스를 더해야 하는 것이고, 음수라면 제거해야 하는 것이다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Bronze/3003. 킹, 퀸, 룩, 비숍, 나이트, 폰/킹, 퀸, 룩, 비숍, 나이트, 폰.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.Arrays; 3 | import java.util.StringTokenizer; 4 | 5 | public class Main { 6 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 7 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 8 | 9 | public static void main(String[] args) throws IOException { 10 | StringTokenizer pieces = new StringTokenizer(bufferedReader.readLine()); 11 | 12 | int[] allPieces = {1, 1, 2, 2, 2, 8}; 13 | 14 | for (int i = 0; i < 6; i++) { 15 | int piece = Integer.parseInt(pieces.nextToken()); 16 | 17 | bufferedWriter.write(allPieces[i] - piece + " "); 18 | } 19 | bufferedWriter.close(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /백준/Bronze/3009. 네 번째 점/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 네 번째 점 - 3009 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/3009) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11476 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 기하학, 구현 12 | 13 | ### 문제 설명 14 | 15 |

세 점이 주어졌을 때, 축에 평행한 직사각형을 만들기 위해서 필요한 네 번째 점을 찾는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

세 점의 좌표가 한 줄에 하나씩 주어진다. 좌표는 1보다 크거나 같고, 1000보다 작거나 같은 정수이다.

20 | 21 | ### 출력 22 | 23 |

직사각형의 네 번째 점의 좌표를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/3052. 나머지/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] 나머지 - 3052 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/3052) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11588 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산(arithmetic), 수학(math) 12 | 13 | -------------------------------------------------------------------------------- /백준/Bronze/3052. 나머지/나머지.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.HashSet; 3 | import java.util.Set; 4 | 5 | public class Main { 6 | public static void main(String[] args) throws IOException { 7 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 8 | 9 | Set set = new HashSet(); 10 | for (int x = 0; x < 10; x++) { 11 | int inputL = Integer.parseInt(reader.readLine()) % 42; 12 | 13 | set.add(inputL); 14 | } 15 | 16 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 17 | writer.write(Integer.toString(set.size())); 18 | writer.flush(); 19 | writer.close(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /백준/Bronze/4344. 평균은 넘겠지/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 평균은 넘겠지 - 4344 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/4344) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 15544 KB, 시간: 172 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

20 | 21 |

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

22 | 23 | ### 출력 24 | 25 |

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10-3이하이면 정답이다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Bronze/5073. 삼각형과 세 변/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 삼각형과 세 변 - 5073 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/5073) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11648 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 기하학, 구현, 수학 12 | 13 | ### 문제 설명 14 | 15 |

삼각형의 세 변의 길이가 주어질 때 변의 길이에 따라 다음과 같이 정의한다.

16 | 17 |
    18 |
  • Equilateral : 세 변의 길이가 모두 같은 경우
  • 19 |
  • Isosceles : 두 변의 길이만 같은 경우
  • 20 |
  • Scalene : 세 변의 길이가 모두 다른 경우
  • 21 |
22 | 23 |

단 주어진 세 변의 길이가 삼각형의 조건을 만족하지 못하는 경우에는 "Invalid" 를 출력한다. 예를 들어 6, 3, 2가 이 경우에 해당한다. 가장 긴 변의 길이보다 나머지 두 변의 길이의 합이 길지 않으면 삼각형의 조건을 만족하지 못한다.

24 | 25 |

세 변의 길이가 주어질 때 위 정의에 따른 결과를 출력하시오.

26 | 27 | ### 입력 28 | 29 |

각 줄에는 1,000을 넘지 않는 양의 정수 3개가 입력된다. 마지막 줄은 0 0 0이며 이 줄은 계산하지 않는다.

30 | 31 | ### 출력 32 | 33 |

각 입력에 맞는 결과 (Equilateral, Isosceles, Scalene, Invalid) 를 출력하시오.

34 | 35 | -------------------------------------------------------------------------------- /백준/Bronze/5086. 배수와 약수/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze III] 배수와 약수 - 5086 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/5086) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11388 KB, 시간: 72 ms 8 | 9 | ### 분류 10 | 11 | 사칙연산, 수학 12 | 13 | ### 문제 설명 14 | 15 |

4 × 3 = 12이다.

16 | 17 |

이 식을 통해 다음과 같은 사실을 알 수 있다.

18 | 19 |

3은 12의 약수이고, 12는 3의 배수이다.

20 | 21 |

4도 12의 약수이고, 12는 4의 배수이다.

22 | 23 |

두 수가 주어졌을 때, 다음 3가지 중 어떤 관계인지 구하는 프로그램을 작성하시오.

24 | 25 |
    26 |
  1. 첫 번째 숫자가 두 번째 숫자의 약수이다.
  2. 27 |
  3. 첫 번째 숫자가 두 번째 숫자의 배수이다.
  4. 28 |
  5. 첫 번째 숫자가 두 번째 숫자의 약수와 배수 모두 아니다.
  6. 29 |
30 | 31 | ### 입력 32 | 33 |

입력은 여러 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 10,000이 넘지않는 두 자연수로 이루어져 있다. 마지막 줄에는 0이 2개 주어진다. 두 수가 같은 경우는 없다.

34 | 35 | ### 출력 36 | 37 |

각 테스트 케이스마다 첫 번째 숫자가 두 번째 숫자의 약수라면 factor를, 배수라면 multiple을, 둘 다 아니라면 neither를 출력한다.

38 | 39 | -------------------------------------------------------------------------------- /백준/Bronze/8393. 합/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze V] 합 - 8393 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/8393) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11472 KB, 시간: 72 ms 8 | 9 | ### 분류 10 | 11 | 구현, 수학 12 | 13 | ### 문제 설명 14 | 15 |

n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.

20 | 21 | ### 출력 22 | 23 |

1부터 n까지 합을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Bronze/8393. 합/합.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | 6 | public static void main(String[] args) throws IOException { 7 | int n = Integer.parseInt(bufferedReader.readLine()); 8 | 9 | long result = 0; 10 | for (int i = 1; i <= n; i++) { 11 | result += i; 12 | } 13 | System.out.println(result); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /백준/Bronze/8958. OX퀴즈/OX퀴즈.kt: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader 2 | import java.io.InputStreamReader 3 | 4 | fun main() = with(BufferedReader(InputStreamReader(System.`in`))) { 5 | val len = readLine().toInt() 6 | 7 | for (i in 0 until len) { 8 | val case = readLine() 9 | var score = 0 10 | var chain = 1 11 | for (j in case) { 12 | if (j == 'O') { 13 | score += chain 14 | chain++ 15 | } else { 16 | chain = 1 17 | } 18 | } 19 | println(score) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /백준/Bronze/8958. OX퀴즈/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze II] OX퀴즈 - 8958 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/8958) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 12340 KB, 시간: 100 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation), 문자열(string) 12 | 13 | ### 문제 설명 14 | 15 |

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

16 | 17 |

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

18 | 19 |

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

24 | 25 | ### 출력 26 | 27 |

각 테스트 케이스마다 점수를 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Bronze/9506. 약수들의 합/README.md: -------------------------------------------------------------------------------- 1 | # [Bronze I] 약수들의 합 - 9506 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/9506) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11668 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 구현, 수학, 정수론 12 | 13 | ### 문제 설명 14 | 15 |

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.

16 | 17 |

예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.

18 | 19 |

n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

20 | 21 | ### 입력 22 | 23 |

입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)

24 | 25 |

입력의 마지막엔 -1이 주어진다.

26 | 27 | ### 출력 28 | 29 |

테스트케이스 마다 한줄에 하나씩 출력해야 한다.

30 | 31 |

n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).

32 | 33 |

이때, 약수들은 오름차순으로 나열해야 한다.

34 | 35 |

n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

36 | 37 | -------------------------------------------------------------------------------- /백준/Gold/17298. 오큰수/README.md: -------------------------------------------------------------------------------- 1 | # [Gold IV] 오큰수 - 17298 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/17298) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 199088 KB, 시간: 948 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조, 스택 12 | 13 | ### 문제 설명 14 | 15 |

크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다.

16 | 17 |

예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다.

22 | 23 | ### 출력 24 | 25 |

총 N개의 수 NGE(1), NGE(2), ..., NGE(N)을 공백으로 구분해 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Silver/1065. 한수/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 한수 - 1065 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1065) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11584 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 브루트포스 알고리즘(bruteforcing) 12 | 13 | ### 문제 설명 14 | 15 |

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/10773. 제로/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 제로 - 10773 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10773) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 21924 KB, 시간: 196 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 구현(implementation), 스택(stack) 12 | 13 | ### 문제 설명 14 | 15 |

나코더 기장 재민이는 동아리 회식을 준비하기 위해서 장부를 관리하는 중이다.

16 | 17 |

재현이는 재민이를 도와서 돈을 관리하는 중인데, 애석하게도 항상 정신없는 재현이는 돈을 실수로 잘못 부르는 사고를 치기 일쑤였다.

18 | 19 |

재현이는 잘못된 수를 부를 때마다 0을 외쳐서, 가장 최근에 재민이가 쓴 수를 지우게 시킨다.

20 | 21 |

재민이는 이렇게 모든 수를 받아 적은 후 그 수의 합을 알고 싶어 한다. 재민이를 도와주자!

22 | 23 | ### 입력 24 | 25 |

첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)

26 | 27 |

이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다.

28 | 29 |

정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.

30 | 31 | ### 출력 32 | 33 |

재민이가 최종적으로 적어 낸 수의 합을 출력한다. 최종적으로 적어낸 수의 합은 231-1보다 작거나 같은 정수이다.

34 | 35 | -------------------------------------------------------------------------------- /백준/Silver/10773. 제로/제로.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.Stack; 3 | 4 | public class Main { 5 | public static void main(String[] args) throws IOException { 6 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 7 | 8 | int K = Integer.parseInt(reader.readLine()); // 앞으로 입력될 수 9 | 10 | Stack moneyStack = new Stack<>(); 11 | for (int x = 0; x < K; x++){ 12 | int newNumber = Integer.parseInt(reader.readLine()); // 새로 들어온 수 13 | 14 | if (newNumber == 0) { 15 | moneyStack.pop(); 16 | } else { 17 | moneyStack.add(newNumber); 18 | } 19 | } 20 | 21 | int result = 0; 22 | for (int money : moneyStack) { 23 | result += money; 24 | } 25 | 26 | System.out.println(result); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /백준/Silver/10773. 제로/제로.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | K = int(sys.stdin.readline()) 4 | 5 | numberStack = [] 6 | for k in range(K): 7 | number = int(sys.stdin.readline()) 8 | if number == 0: 9 | numberStack.pop(); 10 | else: 11 | numberStack.append(number) 12 | 13 | result = 0 14 | for number in numberStack: 15 | result += number 16 | 17 | sys.stdout.write(str(result)) 18 | sys.stdout.flush() 19 | sys.stdout.close() -------------------------------------------------------------------------------- /백준/Silver/10815. 숫자 카드/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 숫자 카드 - 10815 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10815) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 168180 KB, 시간: 880 ms 8 | 9 | ### 분류 10 | 11 | 이분 탐색, 자료 구조, 해시를 사용한 집합과 맵, 정렬 12 | 13 | ### 문제 설명 14 | 15 |

숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다.

20 | 21 |

셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다

22 | 23 | ### 출력 24 | 25 |

첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 가지고 있으면 1을, 아니면 0을 공백으로 구분해 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Silver/10816. 숫자 카드 2/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 숫자 카드 2 - 10816 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10816) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 264836 KB, 시간: 1232 ms 8 | 9 | ### 분류 10 | 11 | 이분 탐색, 자료 구조, 해시를 사용한 집합과 맵, 정렬 12 | 13 | ### 문제 설명 14 | 15 |

숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다.

20 | 21 |

셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다.

22 | 23 | ### 출력 24 | 25 |

첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 몇 개 가지고 있는지를 공백으로 구분해 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Silver/10828. 스택/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 스택 - 10828 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10828) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 29380 KB, 시간: 156 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 스택(stack) 12 | 13 | ### 문제 설명 14 | 15 |

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

16 | 17 |

명령은 총 다섯 가지이다.

18 | 19 |
    20 |
  • push X: 정수 X를 스택에 넣는 연산이다.
  • 21 |
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • 22 |
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • 23 |
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • 24 |
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • 25 |
26 | 27 | ### 입력 28 | 29 |

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.

30 | 31 | ### 출력 32 | 33 |

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

34 | 35 | -------------------------------------------------------------------------------- /백준/Silver/10828. 스택/스택.py: -------------------------------------------------------------------------------- 1 | import sys 2 | def pop (stackList) : 3 | if len(stackList) > 0 : 4 | return stackList.pop() 5 | return -1 6 | 7 | def size(stackList) : 8 | return len(stackList) 9 | 10 | def empty(stackList) : 11 | if len(stackList) > 0 : 12 | return 0 13 | return 1 14 | 15 | def top(stackList) : 16 | if len(stackList) > 0 : 17 | return stackList[-1] 18 | return -1 19 | 20 | a = sys.stdin.readline().split() 21 | stackList = [] 22 | for i in range(0, int(a[0])) : 23 | b = sys.stdin.readline().split() 24 | if b[0] =='push' : 25 | stackList.append(b[1]) 26 | else : 27 | c = b[0]+'(stackList)' 28 | print(eval(c)) -------------------------------------------------------------------------------- /백준/Silver/11279. 최대 힙/README.md: -------------------------------------------------------------------------------- 1 | # [Silver II] 최대 힙 - 11279 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11279) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 27160 KB, 시간: 344 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조, 우선순위 큐 12 | 13 | ### 문제 설명 14 | 15 |

널리 잘 알려진 자료구조 중 최대 힙이 있다. 최대 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오.

16 | 17 |
    18 |
  1. 배열에 자연수 x를 넣는다.
  2. 19 |
  3. 배열에서 가장 큰 값을 출력하고, 그 값을 배열에서 제거한다.
  4. 20 |
21 | 22 |

프로그램은 처음에 비어있는 배열에서 시작하게 된다.

23 | 24 | ### 입력 25 | 26 |

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 큰 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 자연수는 231보다 작다.

27 | 28 | ### 출력 29 | 30 |

입력에서 0이 주어진 횟수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 가장 큰 값을 출력하라고 한 경우에는 0을 출력하면 된다.

31 | 32 | -------------------------------------------------------------------------------- /백준/Silver/11286. 절댓값 힙/README.md: -------------------------------------------------------------------------------- 1 | # [Silver I] 절댓값 힙 - 11286 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11286) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 25204 KB, 시간: 336 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조, 우선순위 큐 12 | 13 | ### 문제 설명 14 | 15 |

절댓값 힙은 다음과 같은 연산을 지원하는 자료구조이다.

16 | 17 |
    18 |
  1. 배열에 정수 x (x ≠ 0)를 넣는다.
  2. 19 |
  3. 배열에서 절댓값이 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다. 절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력하고, 그 값을 배열에서 제거한다.
  4. 20 |
21 | 22 |

프로그램은 처음에 비어있는 배열에서 시작하게 된다.

23 | 24 | ### 입력 25 | 26 |

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 절댓값이 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. 입력되는 정수는 -231보다 크고, 231보다 작다.

27 | 28 | ### 출력 29 | 30 |

입력에서 0이 주어진 회수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 절댓값이 가장 작은 값을 출력하라고 한 경우에는 0을 출력하면 된다.

31 | 32 | -------------------------------------------------------------------------------- /백준/Silver/11478. 서로 다른 부분 문자열의 개수/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 서로 다른 부분 문자열의 개수 - 11478 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11478) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 564692 KB, 시간: 1000 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조, 해시를 사용한 집합과 맵, 문자열, 트리를 사용한 집합과 맵 12 | 13 | ### 문제 설명 14 | 15 |

문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오.

16 | 17 |

부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다.

18 | 19 |

예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다.

24 | 25 | ### 출력 26 | 27 |

첫째 줄에 S의 서로 다른 부분 문자열의 개수를 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Silver/11478. 서로 다른 부분 문자열의 개수/서로 다른 부분 문자열의 개수.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.util.*; 3 | 4 | public class Main { 5 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 6 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | String S = bufferedReader.readLine(); 10 | 11 | Set partS = new HashSet<>(); 12 | for (int i = 0; i < S.length(); i++) { 13 | for (int j = i + 1; j <= S.length(); j++) { 14 | partS.add(S.substring(i, j)); 15 | } 16 | } 17 | 18 | bufferedWriter.write(String.valueOf(partS.size())); 19 | bufferedWriter.flush(); 20 | bufferedWriter.close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Silver/1158. 요세푸스 문제/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 요세푸스 문제 - 1158 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1158) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 32764 KB, 시간: 7844 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 큐(queue) 12 | 13 | ### 문제 설명 14 | 15 |

요세푸스 문제는 다음과 같다.

16 | 17 |

1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.

18 | 19 |

N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

24 | 25 | ### 출력 26 | 27 |

예제와 같이 요세푸스 순열을 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Silver/1158. 요세푸스 문제/요세푸스 문제.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from collections import deque 3 | 4 | n_k = sys.stdin.readline().split() 5 | # 사람 수 6 | n = int(n_k[0]) 7 | # 빠질 번호 8 | k = int(n_k[1]) 9 | 10 | myDeque = deque() 11 | for i in range(1, n + 1) : 12 | myDeque.append(i) 13 | 14 | resultList = [] 15 | 16 | num = 1 17 | 18 | # myDeque 끝날때까지 반복 19 | while len(myDeque) > 0 : 20 | # 만약 3의 배수번이라면 해당 수를 뺀다. 21 | if num % k == 0 : 22 | resultList.append(myDeque.popleft()) 23 | else : 24 | myDeque.append(myDeque.popleft()) 25 | num += 1 26 | 27 | result = "<" 28 | for i in resultList : 29 | result += str(i) 30 | if (i != resultList[-1]) : 31 | result += ", " 32 | result += ">" 33 | print(result) -------------------------------------------------------------------------------- /백준/Silver/11650. 좌표 정렬하기/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 좌표 정렬하기 - 11650 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11650) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 58408 KB, 시간: 680 ms 8 | 9 | ### 분류 10 | 11 | 정렬 12 | 13 | ### 문제 설명 14 | 15 |

2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/11651. 좌표 정렬하기 2/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 좌표 정렬하기 2 - 11651 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11651) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 57400 KB, 시간: 628 ms 8 | 9 | ### 분류 10 | 11 | 정렬 12 | 13 | ### 문제 설명 14 | 15 |

2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/11726. 2×n 타일링/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 2×n 타일링 - 11726 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11726) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11604 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 다이나믹 프로그래밍(dp) 12 | 13 | -------------------------------------------------------------------------------- /백준/Silver/11866. 요세푸스 문제 0/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 요세푸스 문제 0 - 11866 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/11866) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 43404 KB, 시간: 164 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 구현(implementation), 큐(queue) 12 | 13 | ### 문제 설명 14 | 15 |

요세푸스 문제는 다음과 같다.

16 | 17 |

1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.

18 | 19 |

N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

24 | 25 | ### 출력 26 | 27 |

예제와 같이 요세푸스 순열을 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Silver/1193. 분수찾기/분수찾기.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.util.StringTokenizer; 5 | 6 | public class Main { 7 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 8 | 9 | public static void main(String[] args) throws IOException { 10 | int X = Integer.parseInt(bufferedReader.readLine()); 11 | int n = 0; 12 | while(n * (n + 1) < 2 * X) { 13 | n++; 14 | } 15 | int k = n * (n + 1) / 2; 16 | int a = 1; 17 | int b = n; 18 | while (k > X) { 19 | k--; 20 | a++; 21 | b--; 22 | } 23 | if (n % 2 == 1) { 24 | System.out.println(a + "/" + b); 25 | } else { 26 | System.out.println(b + "/" + a); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /백준/Silver/1269. 대칭 차집합/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 대칭 차집합 - 1269 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1269) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 74832 KB, 시간: 580 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 해시를 사용한 집합과 맵(hash_set), 트리를 사용한 집합과 맵(tree_set) 12 | 13 | ### 문제 설명 14 | 15 |

자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다.

16 |

예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때, A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.

17 | 18 | ### 입력 19 | 20 |

첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200,000을 넘지 않으며, 모든 원소의 값은 100,000,000을 넘지 않는다.

21 | 22 | ### 출력 23 | 24 |

첫째 줄에 대칭 차집합의 원소의 개수를 출력한다.

25 | 26 | -------------------------------------------------------------------------------- /백준/Silver/1316. 그룹 단어 체커/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 그룹 단어 체커 - 1316 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1316) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11612 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 구현, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

16 | 17 |

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

22 | 23 | ### 출력 24 | 25 |

첫째 줄에 그룹 단어의 개수를 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Silver/13909. 창문 닫기/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 창문 닫기 - 13909 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/13909) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11564 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 수학, 정수론 12 | 13 | ### 문제 설명 14 | 15 |

서강대학교 컴퓨터공학과 실습실 R912호에는 현재 N개의 창문이 있고 또 N명의 사람이 있다. 1번째 사람은 1의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다. 2번째 사람은 2의 배수 번째 창문을 열려 있으면 닫고 닫혀 있으면 연다. 이러한 행동을 N번째 사람까지 진행한 후 열려 있는 창문의 개수를 구하라. 단, 처음에 모든 창문은 닫혀 있다.

16 | 17 |

예를 들어 현재 3개의 창문이 있고 3명의 사람이 있을 때,

18 | 19 |
    20 |
  1. 1번째 사람은 1의 배수인 1,2,3번 창문을 연다. (1, 1, 1)
  2. 21 |
  3. 2번째 사람은 2의 배수인 2번 창문을 닫는다. (1, 0, 1)
  4. 22 |
  5. 3번째 사람은 3의 배수인 3번 창문을 닫는다. (1, 0, 0)
  6. 23 |
24 | 25 |

결과적으로 마지막에 열려 있는 창문의 개수는 1개 이다.

26 | 27 | ### 입력 28 | 29 |

첫 번째 줄에는 창문의 개수와 사람의 수 N(1 ≤ N ≤ 2,100,000,000)이 주어진다.

30 | 31 | ### 출력 32 | 33 |

마지막에 열려 있는 창문의 개수를 출력한다.

34 | 35 | -------------------------------------------------------------------------------- /백준/Silver/13909. 창문 닫기/창문 닫기.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 6 | 7 | public static void main(String[] args) throws IOException { 8 | int N = Integer.parseInt(bufferedReader.readLine()); 9 | 10 | int result = 1; 11 | while (result * result <= N) { 12 | result++; 13 | } 14 | bufferedWriter.write(--result + "\n"); 15 | bufferedWriter.flush(); 16 | bufferedWriter.close(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /백준/Silver/1436. 영화감독 숌/영화감독 숌.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 5 | 6 | public static void main(String[] args) throws IOException { 7 | int n = Integer.parseInt(bufferedReader.readLine()); 8 | int idx = 1; 9 | int result = 666; 10 | while(idx != n) { 11 | result++; 12 | String strResult = String.valueOf(result); 13 | if (strResult.contains("666")) { 14 | idx++; 15 | } 16 | } 17 | System.out.println(result); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /백준/Silver/14425. 문자열 집합/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 문자열 집합 - 14425 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/14425) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 39048 KB, 시간: 332 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 해시를 사용한 집합과 맵(hash_set), 문자열(string), 트리를 사용한 집합과 맵(tree_set) 12 | 13 | -------------------------------------------------------------------------------- /백준/Silver/1446. 지름길/README.md: -------------------------------------------------------------------------------- 1 | # [Silver I] 지름길 - 1446 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1446) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11760 KB, 시간: 88 ms 8 | 9 | ### 분류 10 | 11 | 데이크스트라, 다이나믹 프로그래밍, 그래프 이론 12 | 13 | ### 문제 설명 14 | 15 |

매일 아침, 세준이는 학교에 가기 위해서 차를 타고 D킬로미터 길이의 고속도로를 지난다. 이 고속도로는 심각하게 커브가 많아서 정말 운전하기도 힘들다. 어느 날, 세준이는 이 고속도로에 지름길이 존재한다는 것을 알게 되었다. 모든 지름길은 일방통행이고, 고속도로를 역주행할 수는 없다.

16 | 17 |

세준이가 운전해야 하는 거리의 최솟값을 출력하시오.

18 | 19 | ### 입력 20 | 21 |

첫째 줄에 지름길의 개수 N과 고속도로의 길이 D가 주어진다. N은 12 이하인 양의 정수이고, D는 10,000보다 작거나 같은 자연수이다. 다음 N개의 줄에 지름길의 시작 위치, 도착 위치, 지름길의 길이가 주어진다. 모든 위치와 길이는 10,000보다 작거나 같은 음이 아닌 정수이다. 지름길의 시작 위치는 도착 위치보다 작다.

22 | 23 | ### 출력 24 | 25 |

세준이가 운전해야하는 거리의 최솟값을 출력하시오.

26 | 27 | -------------------------------------------------------------------------------- /백준/Silver/15649. N과 M (1)/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] N과 M (1) - 15649 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/15649) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 22772 KB, 시간: 288 ms 8 | 9 | ### 분류 10 | 11 | 백트래킹 12 | 13 | ### 문제 설명 14 | 15 |

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

16 | 17 |
    18 |
  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
  • 19 |
20 | 21 | ### 입력 22 | 23 |

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

24 | 25 | ### 출력 26 | 27 |

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

28 | 29 |

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Silver/15650. N과 M (2)/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] N과 M (2) - 15650 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/15650) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11632 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 백트래킹 12 | 13 | ### 문제 설명 14 | 15 |

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

16 | 17 |
    18 |
  • 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열
  • 19 |
  • 고른 수열은 오름차순이어야 한다.
  • 20 |
21 | 22 | ### 입력 23 | 24 |

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

25 | 26 | ### 출력 27 | 28 |

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

29 | 30 |

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

31 | 32 | -------------------------------------------------------------------------------- /백준/Silver/15651. N과 M (3)/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] N과 M (3) - 15651 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/15651) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 112444 KB, 시간: 404 ms 8 | 9 | ### 분류 10 | 11 | 백트래킹 12 | 13 | ### 문제 설명 14 | 15 |

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

16 | 17 |
    18 |
  • 1부터 N까지 자연수 중에서 M개를 고른 수열
  • 19 |
  • 같은 수를 여러 번 골라도 된다.
  • 20 |
21 | 22 | ### 입력 23 | 24 |

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 7)

25 | 26 | ### 출력 27 | 28 |

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

29 | 30 |

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

31 | 32 | -------------------------------------------------------------------------------- /백준/Silver/15652. N과 M (4)/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] N과 M (4) - 15652 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/15652) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 15572 KB, 시간: 124 ms 8 | 9 | ### 분류 10 | 11 | 백트래킹 12 | 13 | ### 문제 설명 14 | 15 |

자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.

16 | 17 |
    18 |
  • 1부터 N까지 자연수 중에서 M개를 고른 수열
  • 19 |
  • 같은 수를 여러 번 골라도 된다.
  • 20 |
  • 고른 수열은 비내림차순이어야 한다. 21 |
      22 |
    • 길이가 K인 수열 A가 A1 ≤ A2 ≤ ... ≤ AK-1 ≤ AK를 만족하면, 비내림차순이라고 한다.
    • 23 |
    24 |
  • 25 |
26 | 27 | ### 입력 28 | 29 |

첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)

30 | 31 | ### 출력 32 | 33 |

한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.

34 | 35 |

수열은 사전 순으로 증가하는 순서로 출력해야 한다.

36 | 37 | -------------------------------------------------------------------------------- /백준/Silver/17103. 골드바흐 파티션/README.md: -------------------------------------------------------------------------------- 1 | # [Silver II] 골드바흐 파티션 - 17103 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/17103) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 16552 KB, 시간: 388 ms 8 | 9 | ### 분류 10 | 11 | 수학, 정수론, 소수 판정, 에라토스테네스의 체 12 | 13 | ### 문제 설명 14 | 15 |
    16 |
  • 골드바흐의 추측: 2보다 큰 짝수는 두 소수의 합으로 나타낼 수 있다.
  • 17 |
18 | 19 |

짝수 N을 두 소수의 합으로 나타내는 표현을 골드바흐 파티션이라고 한다. 짝수 N이 주어졌을 때, 골드바흐 파티션의 개수를 구해보자. 두 소수의 순서만 다른 것은 같은 파티션이다.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 테스트 케이스의 개수 T (1 ≤ T ≤ 100)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 N은 짝수이고, 2 < N ≤ 1,000,000을 만족한다.

24 | 25 | ### 출력 26 | 27 |

각각의 테스트 케이스마다 골드바흐 파티션의 수를 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Silver/1735. 분수 합/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 분수 합 - 1735 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1735) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11892 KB, 시간: 80 ms 8 | 9 | ### 분류 10 | 11 | 유클리드 호제법, 수학, 정수론 12 | 13 | ### 문제 설명 14 | 15 |

분수 A/B는 분자가 A, 분모가 B인 분수를 의미한다. A와 B는 모두 자연수라고 하자.

16 |

두 분수의 합 또한 분수로 표현할 수 있다. 두 분수가 주어졌을 때, 그 합을 기약분수의 형태로 구하는 프로그램을 작성하시오. 기약분수란 더 이상 약분되지 않는 분수를 의미한다.

17 | 18 | ### 입력 19 | 20 |

첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다.

21 | 22 | ### 출력 23 | 24 |

첫째 줄에 구하고자 하는 기약분수의 분자와 분모를 뜻하는 두 개의 자연수를 빈 칸을 사이에 두고 순서대로 출력한다.

25 | 26 | -------------------------------------------------------------------------------- /백준/Silver/17478. 재귀함수가 뭔가요?/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 재귀함수가 뭔가요? - 17478 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/17478) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11872 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 구현(implementation), 재귀(recursion) 12 | 13 | ### 문제 설명 14 | 15 |

평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다.

16 | 17 |

매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대학교가 자신과 맞는가에 대한 고민을 항상 해왔다.

18 | 19 |

중앙대학교와 자신의 길이 맞지 않다고 생각한 JH 교수님은 결국 중앙대학교를 떠나기로 결정하였다.

20 | 21 |

떠나기 전까지도 제자들을 생각하셨던 JH 교수님은 재귀함수가 무엇인지 물어보는 학생들을 위한 작은 선물로 자동 응답 챗봇을 준비하기로 했다.

22 | 23 |

JH 교수님이 만들 챗봇의 응답을 출력하는 프로그램을 만들어보자.

24 | 25 | ### 입력 26 | 27 |

교수님이 출력을 원하는 재귀 횟수 N(1 ≤ N ≤ 50)이 주어진다.

28 | 29 | ### 출력 30 | 31 |

출력 예시를 보고 재귀 횟수에 따른 챗봇의 응답을 출력한다.

32 | 33 | -------------------------------------------------------------------------------- /백준/Silver/1764. 듣보잡/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 듣보잡 - 1764 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1764) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 25428 KB, 시간: 252 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조, 해시를 사용한 집합과 맵, 정렬, 문자열 12 | 13 | ### 문제 설명 14 | 15 |

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

20 | 21 |

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

22 | 23 | ### 출력 24 | 25 |

듣보잡의 수와 그 명단을 사전순으로 출력한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Silver/18870. 좌표 압축/README.md: -------------------------------------------------------------------------------- 1 | # [Silver II] 좌표 압축 - 18870 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/18870) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 359540 KB, 시간: 3528 ms 8 | 9 | ### 분류 10 | 11 | 값 / 좌표 압축, 정렬 12 | 13 | ### 문제 설명 14 | 15 |

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.

16 | 17 |

Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.

18 | 19 |

X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 N이 주어진다.

24 | 25 |

둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.

26 | 27 | ### 출력 28 | 29 |

첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Silver/1904. 01타일/01타일.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 6 | int N = Integer.parseInt(reader.readLine()); 7 | // 1. 배열 생성 8 | int[] dp = new int[1000001]; 9 | // 2. 초기화 10 | dp[1] = 1; 11 | dp[2] = 2; 12 | // 3. 점화식 기반 계산값 적용 13 | for (int index = 3; index < N + 1; index++) { 14 | dp[index] = (dp[index - 1] + dp[index - 2]) % 15746; 15 | } 16 | 17 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 18 | writer.write(Integer.toString(dp[N])); 19 | writer.flush(); 20 | writer.close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Silver/1904. 01타일/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 01타일 - 1904 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1904) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 15700 KB, 시간: 108 ms 8 | 9 | ### 분류 10 | 11 | 다이나믹 프로그래밍(dp) 12 | 13 | ### 문제 설명 14 | 15 |

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다.

16 | 17 |

어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다.

18 | 19 |

그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수열을 만들 수 없게 되었다. 예를 들어, N=1일 때 1만 만들 수 있고, N=2일 때는 00, 11을 만들 수 있다. (01, 10은 만들 수 없게 되었다.) 또한 N=4일 때는 0011, 0000, 1001, 1100, 1111 등 총 5개의 2진 수열을 만들 수 있다.

20 | 21 |

우리의 목표는 N이 주어졌을 때 지원이가 만들 수 있는 모든 가짓수를 세는 것이다. 단 타일들은 무한히 많은 것으로 가정하자.

22 | 23 | ### 입력 24 | 25 |

첫 번째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 1,000,000)

26 | 27 | ### 출력 28 | 29 |

첫 번째 줄에 지원이가 만들 수 있는 길이가 N인 모든 2진 수열의 개수를 15746으로 나눈 나머지를 출력한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Silver/1920. 수 찾기/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 수 찾기 - 1920 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1920) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 61816 KB, 시간: 560 ms 8 | 9 | ### 분류 10 | 11 | 이분 탐색(binary_search), 자료 구조(data_structures), 해시를 사용한 집합과 맵(hash_set) 12 | 13 | ### 문제 설명 14 | 15 |

N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.

20 | 21 | ### 출력 22 | 23 |

M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/1927. 최소 힙/README.md: -------------------------------------------------------------------------------- 1 | # [Silver II] 최소 힙 - 1927 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1927) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 26220 KB, 시간: 356 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조, 우선순위 큐 12 | 13 | ### 문제 설명 14 | 15 |

널리 잘 알려진 자료구조 중 최소 힙이 있다. 최소 힙을 이용하여 다음과 같은 연산을 지원하는 프로그램을 작성하시오.

16 | 17 |
    18 |
  1. 배열에 자연수 x를 넣는다.
  2. 19 |
  3. 배열에서 가장 작은 값을 출력하고, 그 값을 배열에서 제거한다.
  4. 20 |
21 | 22 |

프로그램은 처음에 비어있는 배열에서 시작하게 된다.

23 | 24 | ### 입력 25 | 26 |

첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0이라면 배열에서 가장 작은 값을 출력하고 그 값을 배열에서 제거하는 경우이다. x는 231보다 작은 자연수 또는 0이고, 음의 정수는 입력으로 주어지지 않는다.

27 | 28 | ### 출력 29 | 30 |

입력에서 0이 주어진 횟수만큼 답을 출력한다. 만약 배열이 비어 있는 경우인데 가장 작은 값을 출력하라고 한 경우에는 0을 출력하면 된다.

31 | 32 | -------------------------------------------------------------------------------- /백준/Silver/1929. 소수 구하기/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 소수 구하기 - 1929 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/1929) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 308420 KB, 시간: 3128 ms 8 | 9 | ### 분류 10 | 11 | 수학, 정수론, 소수 판정, 에라토스테네스의 체 12 | 13 | ### 문제 설명 14 | 15 |

M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

20 | 21 | ### 출력 22 | 23 |

한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/2164. 카드2/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 카드2 - 2164 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2164) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 43056 KB, 시간: 140 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 큐(queue) 12 | 13 | ### 문제 설명 14 | 15 |

N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다.

16 | 17 |

이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.

18 | 19 |

예를 들어 N=4인 경우를 생각해 보자. 카드는 제일 위에서부터 1234 의 순서로 놓여있다. 1을 버리면 234가 남는다. 여기서 2를 제일 아래로 옮기면 342가 된다. 3을 버리면 42가 되고, 4를 밑으로 옮기면 24가 된다. 마지막으로 2를 버리고 나면, 남는 카드는 4가 된다.

20 | 21 |

N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하는 프로그램을 작성하시오.

22 | 23 | ### 입력 24 | 25 |

첫째 줄에 정수 N(1 ≤ N ≤ 500,000)이 주어진다.

26 | 27 | ### 출력 28 | 29 |

첫째 줄에 남게 되는 카드의 번호를 출력한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Silver/2164. 카드2/카드2.java: -------------------------------------------------------------------------------- 1 | import java.io.BufferedReader; 2 | import java.io.IOException; 3 | import java.io.InputStreamReader; 4 | import java.util.LinkedList; 5 | import java.util.Queue; 6 | 7 | public class Main { 8 | public static void main(String[] args) throws IOException { 9 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 10 | 11 | int N = Integer.parseInt(reader.readLine()); // 카드 수 12 | 13 | Queue cardQueue = new LinkedList<>(); 14 | for (int x = 0; x < N; x++) { 15 | cardQueue.add(x + 1); 16 | } 17 | 18 | while (cardQueue.size() > 1) { 19 | // 첫번째 카드 제거 20 | cardQueue.remove(); 21 | // 두번째 카드 바닥으로 보내기 22 | cardQueue.add(cardQueue.poll()); 23 | } 24 | System.out.println(cardQueue.peek()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /백준/Silver/2740. 행렬 곱셈/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 행렬 곱셈 - 2740 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2740) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 14584 KB, 시간: 140 ms 8 | 9 | ### 분류 10 | 11 | 구현, 선형대수학, 수학 12 | 13 | ### 문제 설명 14 | 15 |

N*M크기의 행렬 A와 M*K크기의 행렬 B가 주어졌을 때, 두 행렬을 곱하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 행렬 A의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 순서대로 주어진다. 그 다음 줄에는 행렬 B의 크기 M과 K가 주어진다. 이어서 M개의 줄에 행렬 B의 원소 K개가 차례대로 주어진다. N과 M, 그리고 K는 100보다 작거나 같고, 행렬의 원소는 절댓값이 100보다 작거나 같은 정수이다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N개의 줄에 행렬 A와 B를 곱한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/2751. 수 정렬하기 2/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 수 정렬하기 2 - 2751 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2751) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 304092 KB, 시간: 972 ms 8 | 9 | ### 분류 10 | 11 | 정렬 12 | 13 | ### 문제 설명 14 | 15 |

N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.

16 | 17 | ### 입력 18 | 19 |

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

20 | 21 | ### 출력 22 | 23 |

첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/2822. 점수 계산/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 점수 계산 - 2822 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2822) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11632 KB, 시간: 84 ms 8 | 9 | ### 분류 10 | 11 | 정렬 12 | 13 | ### 문제 설명 14 | 15 |

상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다.

16 | 17 |

상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총 점수를 구하는 프로그램을 작성하시오.

18 | 19 | ### 입력 20 | 21 |

8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문제, ... 8번 문제이다.

22 | 23 | ### 출력 24 | 25 |

첫째 줄에 참가자의 총점을 출력한다. 둘째 줄에는 어떤 문제가 최종 점수에 포함되는지를 공백으로 구분하여 출력한다. 출력은 문제 번호가 증가하는 순서이어야 한다.

26 | 27 | -------------------------------------------------------------------------------- /백준/Silver/2839. 설탕 배달/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 설탕 배달 - 2839 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/2839) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11580 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 다이나믹 프로그래밍(dp), 그리디 알고리즘(greedy), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다.

16 | 17 |

상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다.

18 | 19 |

상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000)

24 | 25 | ### 출력 26 | 27 |

상근이가 배달하는 봉지의 최소 개수를 출력한다. 만약, 정확하게 N킬로그램을 만들 수 없다면 -1을 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Silver/2839. 설탕 배달/설탕 배달.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | 3 | public class Main { 4 | public static void main(String[] args) throws IOException { 5 | BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 6 | int input = Integer.parseInt(reader.readLine()); 7 | 8 | int result = -1; 9 | if (input % 5 == 0){ 10 | result = input / 5; 11 | } else if ((input != 4 && input != 7) && (input % 5 == 1 || input % 5 == 3)) { 12 | result = input / 5 + 1; 13 | } else if ((input != 4 && input != 7) && (input % 5 == 2 || input % 5 == 4)) { 14 | result = input / 5 + 2; 15 | } 16 | 17 | BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out)); 18 | writer.write(Integer.toString(result)); 19 | writer.flush(); 20 | writer.close(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /백준/Silver/4134. 다음 소수/README.md: -------------------------------------------------------------------------------- 1 | # [Silver IV] 다음 소수 - 4134 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/4134) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 97240 KB, 시간: 848 ms 8 | 9 | ### 분류 10 | 11 | 브루트포스 알고리즘, 수학, 정수론, 소수 판정 12 | 13 | ### 문제 설명 14 | 15 |

16 | 정수 n(0 ≤ n ≤ 4*109)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오.

17 | 18 | ### 입력 19 | 20 |

21 | 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다.

22 | 23 | ### 출력 24 | 25 |

26 | 각각의 테스트 케이스에 대해서 n보다 크거나 같은 소수 중 가장 작은 소수를 한 줄에 하나씩 출력한다.

27 | 28 | -------------------------------------------------------------------------------- /백준/Silver/4134. 다음 소수/다음 소수.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.math.BigInteger; 3 | 4 | public class Main { 5 | private static BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); 6 | private static BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out)); 7 | 8 | public static void main(String[] args) throws IOException { 9 | int count = Integer.parseInt(bufferedReader.readLine()); 10 | 11 | for (int i = 0; i < count; i++) { 12 | BigInteger n = new BigInteger(bufferedReader.readLine()); 13 | 14 | if (n.isProbablePrime(10)) { 15 | bufferedWriter.write(n + "\n"); 16 | } else { 17 | bufferedWriter.write(n.nextProbablePrime() + "\n"); 18 | } 19 | } 20 | bufferedWriter.flush(); 21 | bufferedWriter.close(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /백준/Silver/4358. 생태학/README.md: -------------------------------------------------------------------------------- 1 | # [Silver II] 생태학 - 4358 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/4358) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 89952 KB, 시간: 584 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조(data_structures), 해시를 사용한 집합과 맵(hash_set), 문자열(string), 트리를 사용한 집합과 맵(tree_set) 12 | 13 | ### 문제 설명 14 | 15 |

생태학에서 나무의 분포도를 측정하는 것은 중요하다. 그러므로 당신은 미국 전역의 나무들이 주어졌을 때, 각 종이 전체에서 몇 %를 차지하는지 구하는 프로그램을 만들어야 한다.

16 | 17 | ### 입력 18 | 19 |

프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어진다.

20 | 21 | ### 출력 22 | 23 |

주어진 각 종의 이름을 사전순으로 출력하고, 그 종이 차지하는 비율을 백분율로 소수점 4째자리까지 반올림해 함께 출력한다.

24 | 25 | -------------------------------------------------------------------------------- /백준/Silver/4948. 베르트랑 공준/README.md: -------------------------------------------------------------------------------- 1 | # [Silver II] 베르트랑 공준 - 4948 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/4948) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 13436 KB, 시간: 180 ms 8 | 9 | ### 분류 10 | 11 | 수학, 정수론, 소수 판정, 에라토스테네스의 체 12 | 13 | ### 문제 설명 14 | 15 |

베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다.

16 | 17 |

이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼프가 1850년에 증명했다.

18 | 19 |

예를 들어, 10보다 크고, 20보다 작거나 같은 소수는 4개가 있다. (11, 13, 17, 19) 또, 14보다 크고, 28보다 작거나 같은 소수는 3개가 있다. (17,19, 23)

20 | 21 |

자연수 n이 주어졌을 때, n보다 크고, 2n보다 작거나 같은 소수의 개수를 구하는 프로그램을 작성하시오.

22 | 23 | ### 입력 24 | 25 |

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 케이스는 n을 포함하는 한 줄로 이루어져 있다.

26 | 27 |

입력의 마지막에는 0이 주어진다.

28 | 29 | ### 출력 30 | 31 |

각 테스트 케이스에 대해서, n보다 크고, 2n보다 작거나 같은 소수의 개수를 출력한다.

32 | 33 | -------------------------------------------------------------------------------- /백준/Silver/7785. 회사에 있는 사람/README.md: -------------------------------------------------------------------------------- 1 | # [Silver V] 회사에 있는 사람 - 7785 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/7785) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 58876 KB, 시간: 692 ms 8 | 9 | ### 분류 10 | 11 | 자료 구조, 해시를 사용한 집합과 맵 12 | 13 | ### 문제 설명 14 | 15 |

상근이는 세계적인 소프트웨어 회사 기글에서 일한다. 이 회사의 가장 큰 특징은 자유로운 출퇴근 시간이다. 따라서, 직원들은 반드시 9시부터 6시까지 회사에 있지 않아도 된다.

16 | 17 |

각 직원은 자기가 원할 때 출근할 수 있고, 아무때나 퇴근할 수 있다.

18 | 19 |

상근이는 모든 사람의 출입카드 시스템의 로그를 가지고 있다. 이 로그는 어떤 사람이 회사에 들어왔는지, 나갔는지가 기록되어져 있다. 로그가 주어졌을 때, 현재 회사에 있는 모든 사람을 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 출근, "leave"인 경우는 퇴근이다.

24 | 25 |

회사에는 동명이인이 없으며, 대소문자가 다른 경우에는 다른 이름이다. 사람들의 이름은 알파벳 대소문자로 구성된 5글자 이하의 문자열이다.

26 | 27 | ### 출력 28 | 29 |

현재 회사에 있는 사람의 이름을 사전 순의 역순으로 한 줄에 한 명씩 출력한다.

30 | 31 | -------------------------------------------------------------------------------- /백준/Silver/9461. 파도반 수열/README.md: -------------------------------------------------------------------------------- 1 | # [Silver III] 파도반 수열 - 9461 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/9461) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 11672 KB, 시간: 76 ms 8 | 9 | ### 분류 10 | 11 | 다이나믹 프로그래밍(dp), 수학(math) 12 | 13 | ### 문제 설명 14 | 15 |

오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다.

16 | 17 |

파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다.

18 | 19 |

N이 주어졌을 때, P(N)을 구하는 프로그램을 작성하시오.

20 | 21 | ### 입력 22 | 23 |

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, N이 주어진다. (1 ≤ N ≤ 100)

24 | 25 | ### 출력 26 | 27 |

각 테스트 케이스마다 P(N)을 출력한다.

28 | 29 | -------------------------------------------------------------------------------- /백준/Unrated/10930. SHA-256/README.md: -------------------------------------------------------------------------------- 1 | # [Unrated] SHA-256 - 10930 2 | 3 | [문제 링크](https://www.acmicpc.net/problem/10930) 4 | 5 | ### 성능 요약 6 | 7 | 메모리: 12912 KB, 시간: 108 ms 8 | 9 | ### 분류 10 | 11 | 문자열(string), 구현(implementation) 12 | 13 | -------------------------------------------------------------------------------- /프로그래머스/lv1/64061. 크레인 인형뽑기 게임/크레인 인형뽑기 게임.py: -------------------------------------------------------------------------------- 1 | def solution(board, moves): 2 | answer = 0 3 | stack = [] 4 | 5 | for m in moves : 6 | for i in range(len(board)) : 7 | if board[i][m - 1] == 0 : 8 | continue 9 | elif stack and board[i][m - 1] == stack[-1] : 10 | stack.pop() 11 | board[i][m - 1] = 0 12 | answer += 2 13 | break 14 | else : 15 | stack.append(board[i][m - 1]) 16 | board[i][m - 1] = 0 17 | break 18 | 19 | return answer -------------------------------------------------------------------------------- /프로그래머스/lv2/12939. 최댓값과 최솟값/최댓값과 최솟값.java: -------------------------------------------------------------------------------- 1 | import java.util.StringTokenizer; 2 | import java.util.Arrays; 3 | 4 | class Solution { 5 | public String solution(String s) { 6 | StringTokenizer tokenizer = new StringTokenizer(s, " "); 7 | int count = tokenizer.countTokens(); 8 | int[] sArray = new int[count]; 9 | 10 | for (int x = 0; x < count; x++) { 11 | sArray[x] = Integer.parseInt(tokenizer.nextToken()); 12 | } 13 | 14 | Arrays.sort(sArray); 15 | 16 | String answer = sArray[0] + " " + sArray[count -1]; 17 | return answer; 18 | } 19 | } --------------------------------------------------------------------------------