알고리즘 : 문자열

시간 제한 메모리 제한
1초 256MB

문제

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

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

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

입력

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

출력

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

예제 입력 1 복사

level

예제 출력 1 복사

1

예제 입력 2 복사

baekjoon

예제 출력 2 복사

0

출처

 


 

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	private String in;
	
	public static void main(String[] args) throws Exception {
		Main main = new Main();
		main.start();
	}
	public void start() throws Exception {
		//System.setIn(new FileInputStream("src/test2/input.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		in = br.readLine();
		
		System.out.println(checkPalindrome(0, in.length()-1) == 1 ? 1 : 0);
		br.close();
	}
	private int checkPalindrome(int from, int to) {
		if(from >= to) return 1;
		//System.out.println(String.format("%s %s == %s",in.charAt(from), in.charAt(to), in.charAt(from) == in.charAt(to)));
		if(in.charAt(from) == in.charAt(to)) {
			return checkPalindrome(from+1, to-1) * 1;
		}else {
			return 0;
		}
	}
}

 

시간 메모리 제한
128ms 14188

 


출처

- https://www.acmicpc.net/problem/10988

알고리즘 : 기본정수론

수빈이와 수열

시간 제한 메모리 제한
1초 32MB

 

문제

수빈이는 심심해서 수열을 가지고 놀고 있다. 먼저, 정수 수열 A를 쓴다. 그리고 그 아래에 정수 수열 A의 해당 항까지의 평균값을 그 항으로 하는 정수 수열 B를 쓴다. 

예를 들어, 수열 A가 1, 3, 2, 6, 8이라면, 수열 B는 1/1, (1+3)/2, (1+3+2)/3, (1+3+2+6)/4, (1+3+2+6+8)/5, 즉, 1, 2, 2, 3, 4가 된다. 

수열 B가 주어질 때, 수빈이의 규칙에 따른 수열 A는 뭘까?

입력

첫째 줄에는 수열 B의 길이만큼 정수 N(1 ≤ N ≤ 100)이 주어지고, 둘째 줄에는 수열 Bi를 이루는 N개의 정수가 주어진다. (1 ≤ Bi ≤ 109)

출력

첫째 줄에는 수열 A를 이루는 N개의 정수를 출력한다. (1 ≤ Ai ≤ 109)

예제 입력 1 

1 2

예제 출력 1

2

예제 입력 2

4 3 2 3 5

예제 출력 2

3 1 5 11

예제 입력 3

5 1 2 2 3 4

예제 출력 3

1 3 2 6 8

출처

Contest > Croatian Open Competition in Informatics > COCI 2014/2015 > Contest #1 1번

 


풀이과정

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
	private static final int MAX = 105;
	private static int[] in = new int[MAX];
	private static final String SPACE = " ";
	
	public static void main(String args[]) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		
		int N = Integer.parseInt(br.readLine().trim());
		
		StringTokenizer st = new StringTokenizer(br.readLine().trim(), SPACE);
		
		for (int i = 0; i < N; i++) {
			in[i] = Integer.parseInt(st.nextToken());
			if(i == 0) sb.append(in[i]).append(SPACE);
			else sb.append(in[i] * (i+1) - in[i-1] * i).append(SPACE);
		}
		
		bw.write(sb.toString());
		bw.close();
		br.close();
	}
}
메모리 시간
14148KB 136ms

 


출처

- https://www.acmicpc.net/problem/10539

알고리즘 : 기본정수론

벌집

메모리 제한 시간 제한
128 MB 2초

 

문제

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

입력

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

출력

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

예제 입력 1

13

예제 출력 1

3

 

출처

ICPC > Regionals > Asia Pacific > Korea > Nationwide Internet Competition > Seoul Nationalwide Internet Competition 2004 B번

 


풀이과정

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {	
	public static void main(String args[]) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine().trim());
		br.close();
		int x = 1, cnt = 1;
		for (; x < N; cnt++) {
			x += 6 * cnt;
		}
		System.out.println(cnt);
	}
}

 

메모리 시간
14184KB 124ms

출처

- 백준 2292 벌집 :  https://www.acmicpc.net/problem/2292

 

 

+ Recent posts