주의1. 파이썬은 기본 자료형(immutable)을 제외하면 참조복사다. (Call by object-reference, 값이 아닌 주소를 넘긴다는 의미)엄밀히 말하면 기본자료형 또한 참조복사 형태로 전달되지만, 수정이 불가능하다.def func(x): x = x+1 # 매개변수로 전달된 x의 값이 바뀌는 것이 아닌, x에 11이 재할당된다. print(x) a = 10print(a)위와 같은 경우에는 x는 기본 자료형인 int이기 때문에 변수에 재할당이 일어나며, a의 값은 변경되지 않는다.자칫 Java와 같다고 착각할 수 있지만, Java는 기본 자료형(int, double 등)은 값 자체를 복사하고, 객체는 참조값(주소)을 복사한다. str (문자열)메서드설명str.upper()모두 대문자로 ..
HTML 삽입 미리보기할 수 없는 소스 설명 두 자연수 a, b에 대하여 두 수의 최대 공약수는 다음과 같이 구할 수 있다. a를 b 로 나눈다. a 가 b로 나누어 떨어지지 않는다면, a는 b가 되고, b는 a%b가 된다. 1번으로 돌아가서 a가 b로 나누어 떨어질 때까지 반복한다. a가 b가 b로 나누어 떨어질 때, b가 최대 공약수(gcd)가 된다. 초기값 a 와 초기값 b를 곱한 수에 gcd를 나누면 최소 공배수(lcm)이 구해진다 => 이를 유클리드 호제법이라 한다. Java 코드 public static int gcd(int a, int b){ while(b!=0){ int r = a%b; a = b; b = r; } return a; } HTML 삽입 미리보기할 수 없는 소스
설명 최단거리를 구하는 문제라 BFS를 이용하여 풀었다. 다만, 2차원 배열은 따로 정의하지 않았고 주어진 2차원 Array maps의 값(길일 때 1, 벽일 때 0)을 방문하자마자 0으로 바꿔주었다. Cost (해당 블럭가지의 거리)는 Pair 객체의 멤버 변수로 선언하여 한 칸 움직일 때 1 씩 더해주었다. 다만, 처음 제출했을 때 효율성 테스트에서 모두 시간초과가 발생했다. 그 이유는 방문한 맵(maps[x][y])을 0으로 바꿔주는 연산을 큐에서 Pair 인스턴스를 꺼내온 후 진행했기 때문이다. 따라서 BFS를 이용해 문제를 풀 때, 큐에 노드를 넣기 전에 방문 처리를 해주어야한다. 만약 큐에서 꺼내온 후에 방문 처리를 해주게 되면 해당 노드가 큐에서 나오기 전까지는 방문하지 않은 것으로 간주된다..
HTML 삽입 미리보기할 수 없는 소스 # 2023.04.16 # n개의 수가 들어있는 배열에서, 주어진 수를 m번 골라 가장 큰 수를 만들어보자. # 단, 같은 수를 k번을 초과하여 연속으로 더할 수 없다고 가정한다. n, m, k = map(int,input().split()) nums = list(map(int,input().split())) nums.sort() result = 0 iter = 0 for i in range(m): if(iter HTML 삽입 미리보기할 수 없는 소스
# 2023.04.16 # n x m 으로 놓여있는 카드 중 한 장을 뽑는 문제이다. 카드를 뽑는 규칙은 다음과 같다. # 먼저, 임의의 행을 선택한 후 그 행의 카드 중 숫자가 가장 낮은 카드를 뽑아야만 한다. # 이 경우에, 최종적으로 가장 높은 숫자의 카드를 뽑도록 코드를 작성하고, 뽑은 카드의 숫자를 출력하시오. n, m = map(int, input().split()) # n개의 행, m개의 열 comparisonList = [] # 각 행에서 가장 작은 숫자를 넣는 리스트 for i in range(n): tempList = list(map(int,input().split())) # 임시로 하나의 행을 받아옴 comparisonList.append(min(tempList)) # 행에서 가장 작..
# 2023.04.16 # 어떠한 수 N이 1이 될 때까지 두 과정중 하나를 반복적으로 선택하여 수행하려고 한다. # 단 두 번째 연산은 N이 K로 나누어떨어질 때만 선택할 수 있다. # 1. N에서 1을 뺀다. / 2. N을 K로 나눈다. # N과 K가 주어질 때, N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야하는 최소 횟수를 출력하시오. # 기본 답안 n, k = map(int,input().split()) count=0 while n!=1: if (n%k==0): n //=k else: n-=1 count+=1 print(count) # 개선 답안 n, k = map(int,input().split()) count = 0 while n>=k: # n>=k일 때 count+=n%k+1 # 나..