Level 2 코딩 문제풀이 - 구글입사문제, 하위 디렉토리 파일 찾기

728x90

1부터 10,000까지 8이라는 숫자가 총 몇번 나오는지 카운트

  • 8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
    (※ 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)

총 2가지 방법으로 문제 해결

package CodingTestLv2;

public class Number8Counting {
	
//1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
//8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
//(※ 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)

	public static void main(String[] args) {
		counting('8');
		for(int i = 1; i <=10000; i++) {
			counting2(i);
		}
		System.out.println(count);
		
		System.out.println(808%10);
	}
	
	public static void counting(char ch){
		int count = 0;
		for(int i = 1; i <=10000; i++) {
			String[] str = new String[i];
			str[i-1] = (i + "");
			for(int j = 0; j<str[i-1].length(); j++) {
				if(str[i-1].charAt(j) == ch) {
					count++;
				}
				}
			}
		System.out.println(count);
	}
	static int count = 0;
//	static으로 count를 선언하지 않을 경우 count값이 counting2의 결과값이 초기화가 되어
//	원하는 값을 누적합 시킬 수 없다
	public static void counting2(int num) {
		if(num % 10 == 8) {
			count++;
		}
//		다시 메서드로 돌아가서 숫자가 10보다 작아질때까지 10으로 나눔
//		그 과정에서 %10을 하면 1자리수가 출력이되고 다시 10보다 클 경우에는 1자리수가 없어진
//		다음 2자리 수가 1자리 수가 되어서 8이 아닌지 맞는지 비교가 되는 코드
//		else if를 사용하지 않는 이유는 num의 결과가 8이 맞더라도 아래의 결과가 실행되어야 하기 때문에 일반 if를 씀
		if(num>10) {
			counting2(num/10);
		}
	}
	
}

하위 디렉토리 파일 포함하여 디렉토리 안 특정 타입 파일 찾기

File API를 사용하여 하위 디렉토리가 존재 시 포함하여 검색하였고 파일 이름이 LIFT IS TOO SHORT이고 .txt 파일일 경우 아래와 같이 출력

  1. file의 타입이 폴더일경우에 재귀함수를 사용하여 폴더의 getAbsolutePath를 다시 대입해 그 하위 파일을 검색하였다
  2. 파일일 경우에는 

출력값:

주소값: C:\workplace\java\previousfile\New22.1.8\TimPersonal\bin\LIFE IS TOO SHORT.txt
파일 이름: LIFE IS TOO SHORT.txt
주소값: C:\workplace\java\previousfile\New22.1.8\TimPersonal\LIFE IS TOO SHORT.txt
파일 이름: LIFE IS TOO SHORT.txt
주소값: C:\workplace\java\previousfile\New22.1.8\TimPersonal\src\LIFE IS TOO SHORT.txt
파일 이름: LIFE IS TOO SHORT.txt
총 파일 개수: 3

package CodingTestLv2;

import java.io.File;

public class FilePathContains {
	
	static int count;
	
	//A라는 디렉토리 하위에 있는 텍스트 파일(*.txt) 중에서
	//LIFE IS TOO SHORT 라는 문자열을 포함하고 있는 파일들을 모두 찾을 수 있는 프로그램을 작성하시오.
	//단, 하위 디렉토리도 포함해서 검색해야 함.
	
//	path A는 아래로 가정
//	C:\workplace\java\previousfile\New22.1.8\TimPersonal
//	임의로 LIFE IS TOO SHORT.txt 파일을 3개 숨겨놓음
	
	public static void main(String[] args) {
		filecheck("C:\\workplace\\java\\previousfile\\New22.1.8\\TimPersonal");
		System.out.println("총 파일 개수: " + count);
		
	}
	
	static void filecheck(String pathA) {
		File f = new File(pathA);
		for(File flist : f.listFiles()) {
			 if(flist.isDirectory()) {
				 filecheck(flist.getAbsolutePath().toString());
//				 toString으로 매개변수에 들어갈 수 있도록 변환
			 }
			 else if(flist.isFile()) {
				 if(flist.getName().endsWith(".txt") && flist.getName().contains("LIFE")) {
					 count++;
					 System.out.println("주소값: "+flist.getAbsolutePath());
					 System.out.println("파일 이름: " + flist.getName());
				}
			}
		}
	}
}
728x90