본문 바로가기

알고리즘7

[JS] 알고리즘 - 다이아몬드 형 별찍기 다이아몬드 형 별 찍기입력한 숫자만큼 다이아몬드 형의 별을 찍는 알고리즘입니다. 아래는 숫자 3을 입력했을 때의 결과예요. 아래는 숫자 5를 입력한 결과구요.  흔하게 생각해볼 수 있는 방법은 for문을 두개 돌리는 것이겠죠.별의 개수가 점차 증가하는 for문 이후에 별의 개수가 점차 감소하는 for문을 붙여서 만드는 방법이 바로 떠오를 것 같습니다. But, 조금 다르게 짜보는 게 재미있죠.아래 코드는 for문 한 개로 해결할 수 있을까 해서 만들어본 코드입니다.  핵심은1. 출력문이 '공백 + 별 + 공백' 형태라는 점n값으로 5를 입력하면 위와 같은 결과가 나와야 합니다. 1번줄 : 공백 4칸 + 별 1개2번줄 : 공백 3칸 + 별 3개3번줄 : 공백 2칸 + 별 5개4번줄 : 공백 1칸 + 별 7.. 2023. 7. 14.
[백준-파이썬] python, 2563번 색종이 (실버5) https://www.acmicpc.net/problem/2563 2563번: 색종이 가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 www.acmicpc.net 처음에 이 문제를 접했을 때는 어렵게 생각했어요. 도화지 크기가 100 * 100 이니까 면적을 먼저 구하고 거기서 색종이 면적을 빼고, 다음 색종이의 면적도 빼고, 그럼 첫번째 색종이와 두번째 색종이가 서로 겹치는 면적은 두번 빼는 게 되니까 한번은 다시 더해주고..... 몇시간을 생각하다가 포기했었어요. 근데 한참 묵혀뒀다가 오늘 이 문제를 다시 열어보니, 문제를 보자마자!! 조금 더 쉬운 방법.. 2023. 6. 25.
[백준-파이썬] 2775번 문제. 부녀회장이 될테야 (브론즈1) https://www.acmicpc.net/problem/2775 case = int(input()) for _ in range(case): k = int(input()) n = int(input()) # 0층 인원수 배열 만들기 arr = [level for level in range(1, n+1)] # K층까지 돌고 for i in range(k): # 각층의 n호까지 돌기 for j in range(1, n): # 모든 층의 1호[인덱스0]에는 1명이 살고 있으므로 arr[0]은 필요 X arr[j] += arr[j-1] # 마지막 호실 인원 출력 print(arr[-1]) 케이스 수는 다시 사용되지 않으므로 변수를 할당해줄 필요가 없습니다. 그래서 for _ in ~ 으로 작성합니다. 그리고 0층.. 2023. 6. 23.
[백준-파이썬] 2441번 별 찍기-4 (브론즈3) 간단한 문제입니다. 앞에 몇칸을 띄울 것인가, 별은 몇개를 찍을 것인가 를 생각해보면 됩니다. 공백 별 0 5 1 4 2 3 3 2 4 1 공백은 차례로 증가하는 i만큼 찍으면 되겠고, 별은 그 수를 역산하는 n-i로 찍으면 되겠네요. n = 5, i = 0,1,2,3,4 5-0 = 5 5-1 = 4 5-2 = 3 5-3 = 2 5-4 = 1 이렇게 별은 내려오면서 5개부터 1개까지 찍힙니다. n = int(input()) for i in range(0, n): print(" " * i, "*" * (n-i), sep="") 컴마로 구분해주면 요소 사이에 무조건 공백이 생기기 때문에 sep="" 속성으로 공백과 별 사이의 컴마로 인한 공백을 없애주었습니다. 2023. 6. 23.
[백준-파이썬] 10817번 세 수 (브론즈3) 1. 내 코드 nums = list(map(int, input().split())) for i in range(0, len(nums)): for j in range(i + 1, len(nums)): if nums[i] > nums[j]: nums[i], nums[j] = nums[j], nums[i] print(nums[1]) 저는 번거롭긴 하지만 버블소트로 짜봤어요. 배운거 기억 더듬어볼 겸... 2. 숏코드 print(sorted(input().split(),key=int)[1]) 풀이 후 다른 분의 숏코드를 보고 놀랐습니다. 이런 방법이 있었군요! sorted로 int 기준으로 배열값들을 순서대로 정렬한 후, 가운데 값인 [1] 가져오네요. 결과값이 string이긴 하지만 채점에는 문제가 되지 않.. 2023. 6. 21.
[백준-파이썬] 10872번 팩토리얼 (python) https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 팩토리얼이란? 팩토리얼이란, n부터 1까지 -1을 하며 곱한 수입니다. n!의 형태로 표현됩니다. 즉 3! 이라면, 3 * 2 * 1 = 6이 되겠습니다. 주의) 0!은 1입니다. 왜냐하면 ... 10팩토리얼이라 하면 아래와 같겠죠. 10! = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 그럼 풀이 나갑니다. :) 1. 재귀함수로 푼 코드 n = int(input()) def facto(n): if n == 0: return 1 return n * facto(n -1) pri.. 2023. 6. 21.
[논리력] 로보즐-튜토리얼 1~4 풀이 http://www.robozzle.com/beta/index.html RoboZZle - a social puzzle game www.robozzle.com 위 링크를 클릭하면 로보즐 사이트로 이동합니다. 간단한 알고리즘들을 생각해볼 수 있는 문제들이 가득합니다. 여기서는 가장 기초인 튜토리얼 1단계부터 4단계까지 다뤄보겠습니다. :) 위에서 Part 1을 클릭해서 튜토리얼을 시작합니다. 튜토리얼 1단계 종이 비행기를 출발시켜서 별을 모두 먹으면 성공입니다. 1단계는 F1이라는 칸 안에 방향키를 순서대로 주욱 넣으면 끝입니다. 따로 더 할게 없지요 아직은. 튜토리얼 2단계 2단계부터는 F2가 등장합니다. 함수가 하나 더 등장한거예요. 사실 F1도 함수입니다. 그러니 지금 F1, F2 이렇게 2개의 함수.. 2023. 6. 19.