목록전체 글 (241)
곽로그
문제 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 접근 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; public class Main { p..
문제 https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. www.acmicpc.net 방법1 크기가 M인 numArray를 선언한다 numArray의 index에 1~N 중 하나의 숫자를 넣는다 numArray의 index+1 에 numArray[index-1]~N 중 하나의 숫자를 넣는다. 코드1 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader..
개념 "최솟값을 선택"하는 알고리즘이다. 버블정렬은 좌우-좌우를 순차적으로 비교하면서 각 턴마다 최대값을 맨 오른쪽으로 보내는 것이라면, 선택알고리즘은 각 턴마다 최소값을 찾은 후 맨 왼쪽으로 보내는 알고리즘이다. 구현 7 5 6 9 2 를 예로 들어보자. 첫번째 순회에서는 인덱스 0에 넣을 최솟값을 찾는다. 7 5 6 9 2 중 최솟값은 2 이므로 인덱스 0에 있는 7과 자리를 바꾼다. 첫번째 순회의 결과는 2 5 6 9 7이 된다. 첫번째 순회에서 인덱스 0은 최소값으로 정렬되었다. 두번째 순회에서는 인덱스 1에 넣을 최솟값을 찾는다. (2) 5 6 9 7에서 최솟값은 5 이므로 인덱스 1에 5를 넣는다. 두번째 순회의 결과는 2 5 6 9 7 이되고 인덱스 0,1은 크기순으로 정렬되어 있다. 이런식..
문제 https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다. www.acmicpc.net 접근방법 String 클래스의 메서드를 활용하면 쉽게 풀 수 있는 문제다. 첫번째 풀이 : isBlank()함수를 사용 단어의 개수는 문장사이의 공백의 개수 +1 이다. 따라서 입력받은 문장의 공백의 개수를 카운팅하면 된다. 여기서 고려해야하는 사항은 두가지다. 첫번째로는 문장 앞뒤로 공백이 있을 수 있다는 건데, 이는 trim함수를 사용하면..
소스 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String..
문제 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 접근방법 문자 숫자 소요시간(초) ABC 2 3 DEF 3 4 GHI 4 5 JKL 5 6 MNO 6 7 PQRS 7 8 TUV 8 9 WXYZ 9 10 우선 위의 표를 만들어봤다. 소요시간은 숫자+1 이라는 관계가 있다. 그럼 이제 문자와 숫자에 대한 대응관계를 생각해주면 된다. 그런데 문자가 3개인 경우도 있고 4개인 경우도 있어서 이걸 일반화하기는 어려웠다. 그래서 그냥 각 문자다마 일대일 대응으로 접근했다. numbe..
문제 접근 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStre..
왜 이름이 거품정렬일까? 프로그래밍에서 변수나 메서드의 이름을 지을때는 그 역할을 명확하게 표현하게끔 짓는다고 했다. 근데 이 정렬은 왜 버블(거품)정렬일까. 나 같은 사람이 한명은 아닐 것 같아서 구글링을 했다. "배열에서 요소의 이동이 물에서 거품의 움직임과 비슷하기 때문이다"라고한다. 그러니까 큰 거품이 제일 먼저 올라가는 것 처럼 가장 큰 요소가 가장 먼저 정렬이 된다. 이런 뜻인 것 같은데 글쎄. 개념 가장 큰 거품이 가장 먼저 올라간다는 이반 무쉬케티크(?)아저씨의 말처럼 버블정렬은 가장 큰 요소(반대로 가장 작은 요소가 먼저 일 수도 있다) 가 가장 먼저 정렬이 되는 알고리즘이다. 즉 오름차순(혹은 내림차순)으로 정렬을 한다는 내용이다. 오름차순을 구현하는 방법은 간단하다. 이웃하는 두 개의..